商业精灵将所有调试/编译器信息剥离了……非常残酷,所以我不得不猜测它是用什么gcc编译的,然后交叉编译参考源使用此猜测的gcc版本。
我的问题是,构建elf生成签名时,编译器版本有多重要?如果我得到的版本不正确,我的所有签名都会根本无法匹配我正在使用的目标二进制文件吗?
#1 楼
是的,正确的编译器版本以及编译选项非常重要。不同版本的编译器可能具有截然不同的寄存器分配器或优化算法,这可能导致同一源的二进制文件非常不同。此外,idb2pat
可能未针对AArch64进行调整,并且可能未正确标记可重定位的字节,从而导致限制模式过多。更好的选择是从带有.o
的目标文件(.a
)或静态库(pelf
)生成模式,因为它可以使用重定位信息标记通配符字节。建议使用直接的人类直觉和函数/字符串文字之间的引用,手动将其与源代码进行匹配。这可能比找到正确的编译器版本和选项要快。 />如果需要大规模扩展,则需要收集许多编译器版本,并尝试各种会影响代码生成的选项(至少是优化级别,即-O0, -O1, -O2, -O3
)。您还应该尝试使用其他编译器,例如llvm / clang(公共版本和ARM的定制版本)。一个编译器和一组选项,以匹配您在二进制文件中看到的代码。
评论
伊戈尔,是的,我正在使用Diaphora,但这并没有很大帮助,有点。我可以看到一些相似之处,谢谢您的出色建议。在没有成功的情况下,建立了许多工具链的参考。.您的建议非常有帮助,并将报告任何进度。
–嗨,罗
18-10-10在13:53