以下是使用Igor Skochinsky 的回答所需的步骤:
git clone --depth=1 git://git.musl-libc.org/musl
cd musl; ./configure; make -s -j2
- 从 IDA SDK 中提取 Flair 工具。
pelf
使用上面步骤编译的 musl 静态库运行(ELF 解析器):
cd ./lib
~/flair/bin/linux/pelf libc.a
输出将类似于以下内容:
Fatal [/mnt/c/MyFiles/libc.a] (__init_tls.lo): Unknown relocation type 42 (offset in section=0x3a).
- 要修复不受支持的重定位错误,请
pelf
使用以下-r
选项运行:
./flair/bin/linux/pelf -r42:58:0 libc.a musl.pat
该-r
选项被指定为-rN:O:L
其中 N 是重定位类型,在距重定位地址的偏移量 O 处标记为变量 L 字节。这将创建一个 PAT 文件。
- 现在运行
sigmake
以创建 Flair 签名文件:
./flair/bin/linux/sigmake -n musl musl.pat musl.sig
如果输出未显示任何警告,则 SIG 文件正常。但是如果与函数签名有任何冲突,输出将如下所示:
libc.sig: modules/leaves: 1550/1775, COLLISIONS: 41
要减轻错误,请从musl.exc
碰撞文件中删除注释。然后sigmake
再次运行上面的命令。将有一个musl.sig
文件可以从文件 > 加载文件 > FLIRT 签名文件导入 IDA Pro。
FLIRT 签名取决于 C/C++ 编译器。就我而言,它是叮当声。我在异常处理函数中找到了它。会有一个像CLNGC++\0
. 在 IDA 的字符串窗口中找不到该字符串。所以,首先要找到异常处理函数。诀窍是只要返回错误值就会调用该函数。