MCPcopy Create free account
hub / github.com/PCSX2/pcsx2 / parseDisasm

Function parseDisasm

pcsx2/DebugTools/DisassemblyManager.cpp:33–91  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

31
32
33static void parseDisasm(SymbolGuardian& guardian, const char* disasm, char* opcode, char* arguments, size_t arguments_size, bool insertSymbols)
34{
35 if (*disasm == '(')
36 {
37 while (*disasm != ')' && *disasm != 0)
38 disasm++;
39 if (*disasm == ')')
40 disasm++;
41 }
42
43 // copy opcode
44 while (*disasm != 0 && *disasm != '\t')
45 {
46 *opcode++ = *disasm++;
47 }
48 *opcode = 0;
49
50 if (*disasm++ == 0)
51 {
52 *arguments = 0;
53 return;
54 }
55
56 char* arguments_start = arguments;
57 const char* jumpAddress = strstr(disasm,"->$");
58 const char* jumpRegister = strstr(disasm,"->");
59 while (*disasm != 0)
60 {
61 // parse symbol
62 if (disasm == jumpAddress)
63 {
64 u32 branchTarget;
65 sscanf(disasm+3,"0x%08x",&branchTarget);
66
67 const std::string addressSymbol = guardian.SymbolStartingAtAddress(branchTarget).name;
68 if (!addressSymbol.empty() && insertSymbols)
69 {
70 arguments += std::snprintf(arguments, arguments_size - (arguments - arguments_start), "%s",addressSymbol.c_str());
71 } else {
72 arguments += std::snprintf(arguments, arguments_size - (arguments - arguments_start), "0x%08X",branchTarget);
73 }
74
75 disasm += 3+2+8;
76 continue;
77 }
78
79 if (disasm == jumpRegister)
80 disasm += 2;
81
82 if (*disasm == ' ')
83 {
84 disasm++;
85 continue;
86 }
87 *arguments++ = *disasm++;
88 }
89
90 *arguments = 0;

Callers 1

disassembleMethod · 0.85

Calls 3

emptyMethod · 0.45
c_strMethod · 0.45

Tested by

no test coverage detected