summaryrefslogtreecommitdiff
path: root/misc/lldb_disasm.py
diff options
context:
space:
mode:
Diffstat (limited to 'misc/lldb_disasm.py')
-rw-r--r--misc/lldb_disasm.py23
1 files changed, 16 insertions, 7 deletions
diff --git a/misc/lldb_disasm.py b/misc/lldb_disasm.py
index ff805ed428..ab759f009a 100644
--- a/misc/lldb_disasm.py
+++ b/misc/lldb_disasm.py
@@ -63,6 +63,7 @@ class IseqDisassembler:
self.internal_dict = internal_dict
self.target = debugger.GetSelectedTarget()
+ self.insns_address_table = self.__get_insns_address_table()
self.process = self.target.GetProcess()
self.thread = self.process.GetSelectedThread()
self.frame = self.thread.GetSelectedFrame()
@@ -88,7 +89,7 @@ class IseqDisassembler:
tIntPtr = target.FindFirstType("intptr_t")
size = target.EvaluateExpression('ruby_vminsn_type::VM_INSTRUCTION_SIZE').unsigned
sizeOfIntPtr = tIntPtr.GetByteSize()
- addr_of_table = target.FindSymbols("vm_exec_core.insns_address_table")[0].GetSymbol().GetStartAddress().GetLoadAddress(target)
+ addr_of_table = self.insns_address_table.GetStartAddress().GetLoadAddress(target)
my_dict = {}
@@ -144,7 +145,7 @@ class IseqDisassembler:
def insn_len(self, target, offset):
size_of_char = self.tChar.GetByteSize()
- symbol = target.FindSymbols("insn_len.t")[0].GetSymbol()
+ symbol = target.FindSymbols("rb_vm_insn_len_info")[0].GetSymbol()
section = symbol.GetStartAddress().GetSection()
addr_of_table = symbol.GetStartAddress().GetOffset()
@@ -162,7 +163,7 @@ class IseqDisassembler:
size_of_short = tUShort.GetByteSize()
size_of_char = self.tChar.GetByteSize()
- symbol = target.FindSymbols("insn_op_types.y")[0].GetSymbol()
+ symbol = target.FindSymbols("rb_vm_insn_op_offset")[0].GetSymbol()
section = symbol.GetStartAddress().GetSection()
addr_of_table = symbol.GetStartAddress().GetOffset()
@@ -174,7 +175,7 @@ class IseqDisassembler:
if not error.Success():
print("error getting op type offset: ", error)
- symbol = target.FindSymbols("insn_op_types.x")[0].GetSymbol()
+ symbol = target.FindSymbols("rb_vm_insn_op_base")[0].GetSymbol()
section = symbol.GetStartAddress().GetSection()
addr_of_table = symbol.GetStartAddress().GetOffset()
addr_in_name_table = addr_of_table + (offset * size_of_char)
@@ -190,7 +191,7 @@ class IseqDisassembler:
tUShort = target.FindFirstType("unsigned short")
size_of_short = tUShort.GetByteSize()
- symbol = target.FindSymbols("insn_name.y")[0].GetSymbol()
+ symbol = target.FindSymbols("rb_vm_insn_name_offset")[0].GetSymbol()
section = symbol.GetStartAddress().GetSection()
table_offset = symbol.GetStartAddress().GetOffset()
@@ -205,7 +206,7 @@ class IseqDisassembler:
print("error getting insn name table offset: ", error)
def insn_name(self, target, process, result, offset):
- symbol = target.FindSymbols("insn_name.x")[0].GetSymbol()
+ symbol = target.FindSymbols("rb_vm_insn_name_base")[0].GetSymbol()
section = symbol.GetStartAddress().GetSection()
addr_of_table = symbol.GetStartAddress().GetOffset()
@@ -220,6 +221,15 @@ class IseqDisassembler:
else:
print('error getting insn name', error)
+ def __get_insns_address_table(self):
+ module = self.target.FindSymbols("vm_exec_core")[0].GetModule()
+
+ for symbol in module:
+ if "insns_address_table" in symbol.name and symbol.GetType() == lldb.eSymbolTypeData:
+ print(f"found symbol {symbol.name}")
+ return symbol
+
+
def disasm(debugger, command, result, internal_dict):
disassembler = IseqDisassembler(debugger, command, result, internal_dict)
frame = disassembler.frame
@@ -235,7 +245,6 @@ def disasm(debugger, command, result, internal_dict):
disassembler.disasm(val);
-
def __lldb_init_module(debugger, internal_dict):
debugger.HandleCommand("command script add -f lldb_disasm.disasm rbdisasm")
print("lldb Ruby disasm installed.")