用ELF(x86和ARM两种版本)弄些麻烦。找到.got部分,找到重定位部分.got / .rel.plt,其.rela.plt包含.sh_info的索引,并找到包含符号名称的符号部分.got。这些部分之间的所有行都很好地对齐,我可以为.dynsym中的条目准确分配符号名称。

但是,我也希望在.got部分中提供存根的名称。可以根据.plt符号的顺序以及与.plt部分底部的偏移量推断出时间大致百分比。无论出于何种原因,有时情况并非如此。Binutils.got可以为x86准确生成它们,而IDA可以为x86和ARM准确生成它们(都没有.plt调试符号)。这些是如何产生的?

在IDA的情况下,我可以合理地假设基于对objdump中指令的解释会发生一些高级逻辑,但是我知道对于-g一定不是这种情况。

#1 楼

看到这个线程。基本上,它们依赖于PLT重定位的顺序与.plt部分中存根的顺序匹配,并且存根的大小都相同的事实。动态符号表中的符号条目。

IDA实际上通常不依赖符号/重定位的顺序,而是检查存根中的实际指令。