我正在与一个研究项目的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
答案 0 :(得分:3)
或我的理解其他错误
是的:您的理解还有其他问题。
节(例如.text
和.data
)仅在静态链接时有意义(静态链接器组.text
从多个.o
文件一起组成一个.text
1}}在最后的可执行文件中)。它们没用,实际上可以在执行时完全剥离。在ELF系统上,您在运行时需要的所有内容都是细分(特别是PT_LOAD
细分),您可以使用readelf -l binary
查看。
ELF文件中的部分是"文件的一部分"。当您转储内存时,部分甚至没有任何意义甚至可以谈论。
您在.data
输出中看到的objdump
也不存在,它只是objdump
生产的工件。