ARM CFG 后续派对: ARM、Thumb 和 ARM 的特殊 ELves
作者: subwire创建于 2019年3月30日更新于 2026年9月6日
标签enhancementhelp wanted
免责声明: angr 套件由一小群志愿者维护。虽然我们无法保证修复和增强的及时性,但我们会尽力。要获得 angr 的实时帮助,请加入我们的 Slack。
您的功能请求是否与问题有关?请描述。
当前的 ARM 二进制文件(特别是用于 Linux 的 A 类型 ARM 二进制文件)在构建 CFG、定位函数和查找符号方面具有奇怪的行为。问题的根源在于我们无法正确区分 ARM 代码、Thumb 代码和数据。显然,在“合适编译器”创建的 ELF 文件中,实际上有两种(或更多?)方法来实现此功能。第一种是符号的 LSB - 这并不总是如此,而且 ARM 似乎只在针对 M 类部分的二进制文件中对其进行标准化。在 ARM/Thumb 切换是合法的平台上,我们需要一些额外的元数据。跳转到一个奇怪的地址是一个很好的信号,但并非所有地址都是奇怪的,因为有时编译器会生成具有偶数地址和 $t 标记的二进制文件,并假定 CPU 在提前时间切换到 Thumb 模式。这些 $a/$t/$d 本地符号分别用于表示 ARM/Thumb/数据。这很好,但它有一些限制。GCC 已经被观察到随机地在各处储存 $d,因此不能完全信任它。另一方面,$a/$t 应该是可以的,前提是用户正确编译了二进制文件。
内容来源: angr/angr