mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-15 15:30:29 +02:00
Add "resolving" of a few symbols to x86 disassembler
This commit is contained in:
1 parent
da1352c924
commit
1abadef87f
1 file changed
+26
@@ -71,6 +71,31 @@ std::vector<std::string> DisassembleArm2(const u8 *data, int size) {
|
||||
|
||||
#ifndef ARM
|
||||
|
||||
const char *ppsspp_resolver(struct ud*,
|
||||
uint64_t addr,
|
||||
int64_t *offset) {
|
||||
// For some reason these two don't seem to trigger..
|
||||
if (addr >= (uint64_t)(¤tMIPS->r[0]) && addr < (uint64_t)¤tMIPS->r[32]) {
|
||||
*offset = addr - (uint64_t)(¤tMIPS->r[0]);
|
||||
return "mips.r";
|
||||
}
|
||||
if (addr >= (uint64_t)(¤tMIPS->v[0]) && addr < (uint64_t)¤tMIPS->v[128]) {
|
||||
*offset = addr - (uint64_t)(¤tMIPS->v[0]);
|
||||
return "mips.v";
|
||||
}
|
||||
// But these do.
|
||||
if (MIPSComp::jit->IsInSpace((u8 *)(intptr_t)addr)) {
|
||||
*offset = addr - (uint64_t)MIPSComp::jit->GetBasePtr();
|
||||
return "jitcode";
|
||||
}
|
||||
if (MIPSComp::jit->Asm().IsInSpace((u8 *)(intptr_t)addr)) {
|
||||
*offset = addr - (uint64_t)MIPSComp::jit->Asm().GetBasePtr();
|
||||
return "dispatcher";
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
std::vector<std::string> DisassembleX86(const u8 *data, int size) {
|
||||
std::vector<std::string> lines;
|
||||
ud_t ud_obj;
|
||||
@@ -83,6 +108,7 @@ std::vector<std::string> DisassembleX86(const u8 *data, int size) {
|
||||
ud_set_pc(&ud_obj, (intptr_t)data);
|
||||
ud_set_vendor(&ud_obj, UD_VENDOR_ANY);
|
||||
ud_set_syntax(&ud_obj, UD_SYN_INTEL);
|
||||
ud_set_sym_resolver(&ud_obj, &ppsspp_resolver);
|
||||
|
||||
ud_set_input_buffer(&ud_obj, data, size);
|
||||
|
||||
|
||||
Reference in new issue
Block a user