Debugging 如何了解JIT';密码?
我正在与Firefox合作进行一个研究项目。Firefox在运行时使用大量的Debugging 如何了解JIT';密码?,debugging,firefox,reverse-engineering,jit,disassembly,Debugging,Firefox,Reverse Engineering,Jit,Disassembly,我正在与Firefox合作进行一个研究项目。Firefox在运行时使用大量的JIT'ed代码 我使用定制的PIN工具检测Firefox,以找出我正在寻找的某些东西的位置(地址)。问题在于,这些位置都是在JIT'edcode中。我想知道代码里到底发生了什么 为此,我转储了相应的内存区域,并使用objdump反汇编转储。 我使用objdump-D-b binary-mi386 file.dump查看本应执行的指令。令我惊讶的是,唯一列出的部分是.data部分(一个非常大的部分) 要么是我错误地分解了
JIT'ed
代码
我使用定制的PIN工具检测Firefox,以找出我正在寻找的某些东西的位置(地址)。问题在于,这些位置都是在JIT'ed
code中。我想知道代码里到底发生了什么
为此,我转储了相应的内存区域,并使用objdump
反汇编转储。
我使用objdump-D-b binary-mi386 file.dump
查看本应执行的指令。令我惊讶的是,唯一列出的部分是.data
部分(一个非常大的部分)
要么是我错误地分解了它,要么是我的理解有问题。我希望看到更多像.text
这样的部分,其中应该有实际的可执行指令,而.data
部分不应该是可执行的
我在这里的理解正确吗
另外,如果有人能告诉我如何正确地知道Jit'ed中发生了什么
机器
Linux 3.13.0-24-generic#47 Ubuntu SMP x86_64
或者我的理解有什么问题
是的:你的理解还有其他问题
节(如.text
和.data
)仅在静态链接时才有意义(静态链接器将多个.o
文件中的.text
组合成最终可执行文件中的单个.text
)。它们没有用处,实际上可以在执行时完全剥离。在ELF系统上,运行时需要的全部是段(PT_LOAD
段),您可以通过readelf-l binary
看到这些段
ELF文件中的部分是“文件的一部分”。当您转储内存时,节甚至不值得讨论
您在objdump
输出中看到的.data
也不存在,它只是objdump
制造的一个工件。如果您真正谈论的是JITed代码,这意味着它是动态生成的,因此不会成为可执行映像的一部分。它将只是在内存中标记为可执行文件,例如。再次感谢。这意味着我可以解释objdump所示的指令,并尝试弄清楚这里发生了什么。我的意思是,在这种情况下,objdump拆卸是可以的。