你如何知道JIT代码中发生了什么?

时间:2014-12-26 11:06:28

标签: debugging firefox reverse-engineering jit disassembly

我正在与一个研究项目的Firefox合作。 Firefox在运行时使用了大量JIT'ed代码。

我使用自定义PIN tool对Firefox进行了检测,以找出我正在寻找的一些内容的位置(地址)。问题是这些位置是JIT'ed代码。我想知道代码中实际发生了什么。

为此,我转储了相应的内存区域并使用objdump来反汇编转储。 我使用objdump -D -b binary -mi386 file.dump来查看本已执行的指令。令我惊讶的是,列出的唯一部分是.data部分(非常大)。

要么我错误地拆卸它,要么我的理解是错误的。我希望看到更多类似.text的部分,其中应该存在实际的可执行指令,而.data部分不应该是可执行的。

我的理解是否正确?

另外如果有人可以告诉我如何正确了解Jit'ed代码中发生的事情。

Linux 3.13.0-24-generic #47-Ubuntu SMP x86_64

1 个答案:

答案 0 :(得分:3)

  

或我的理解其他错误

是的:您的理解还有其他问题。

节(例如.text.data)仅在静态链接时有意义(静态链接器组.text从多个.o文件一起组成一个.text 1}}在最后的可执行文件中)。它们没用,实际上可以在执行时完全剥离。在ELF系统上,您在运行时需要的所有内容都是细分(特别是PT_LOAD细分),您可以使用readelf -l binary查看。

ELF文件中的部分是"文件的一部分"。当您转储内存时,部分甚至没有任何意义甚至可以谈论。

您在.data输出中看到的objdump也不存在,它只是objdump生产的工件。