我正在使用 Firefox 进行一个研究项目。 Firefox 在运行时使用大量JIT
代码。
我使用自定义 PIN 工具
来检测 Firefox,以找出我要查找的某些内容的位置(地址)。问题在于这些位置位于 JIT 代码中。我想知道代码中实际发生了什么。
为此,我转储了相应的内存区域并使用 objdump 来反汇编转储。
我使用 objdump -D -b binary -mi386 file.dump 来查看将要执行的指令。令我惊讶的是,列出的唯一部分是 .data
部分(非常大的部分)。
要么是我错误地反汇编了它,要么是我的理解有其他问题。我希望看到更多像 .text
这样的部分,其中应该存在实际的可执行指令,而 .data
部分不应该是可执行的。
我的理解正确吗?
另外,如果有人可以请告诉我如何正确了解 Jit'ed
代码中发生的情况。
机器
Linux 3.13.0-24-generic#47-Ubuntu SMP x86_64
最佳答案
or something else is wrong with my understanding
是的:您的理解还有问题。
节(例如 .text
和 .data
)仅在静态链接时有意义(静态链接器将来自多个的 .text
分组) .o
文件一起合并到最终可执行文件中的单个 .text
中)。它们没有用,实际上可以在执行时被完全剥离。在 ELF 系统上,运行时所需的只是段(特别是 PT_LOAD
段),您可以使用 readelf -l binary
查看它们。
ELF 文件中的部分是“文件的一部分”。当您转储内存时,讨论这些部分就没任何意义。
您在 objdump
输出中看到的 .data
也并不真正存在,它只是 objdump
制造的工件。
关于debugging - 您如何了解 JIT 代码中发生的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27656270/