我现在是用 fromelf 生成反汇编文件,然后再用正则表达式从反汇编文件中解析出函数调用关系(单片机程序,只有几十 K )
但是反汇编文件本身没有标准,每个编译器生成的反汇编文件格式都不一样,,而且还会随着时间变化,,不方便维护
我就想,fromelf 能从 elf 文件解析出函数调用关系,那说明 elf 文件中是存储了这种信息的,而 elf 格式本身是标准化的,,那直接从 elf 文件中解析函数调用关系岂不是更稳定、更全面
网上搜到的 elf 解析库主要是 pyelftools,,但是感觉它只能解析 elf 文件的各种 header 和符号表,,似乎没有解析函数调用关系的能力
请问各位大佬,,python 有 lib 能实现这种功能吗?
1
codehz 2021-06-01 20:47:04 +08:00 via Android
建议直接 ida (指它内置的 py
|
2
SingeeKing 2021-06-01 20:47:22 +08:00 via iPhone
elf 没存,能做到是反汇编的
|
3
mconintet 2021-06-01 21:23:32 +08:00
可能确实需要先反汇编然后分析一波
|
4
no1xsyzy 2021-06-01 22:02:31 +08:00
需要反汇编,而且应当不能完全分析,C 语言允许使用函数指针实现一定程度的动态,还有在结构体里塞函数指针装作自己是面向对象这样的操作
|
5
zk8802 2021-06-01 23:25:44 +08:00 via iPhone 1
angr 这个是纯 Python 的库
Ghidra 好像有 Python binding IDA Pro 有 Python binding radare2 |
7
secondwtq 2021-06-02 00:37:37 +08:00
方向错了,ELF 只是个容器,里面啥都可以存的
也就是说你这个问题相当于,有没有一个机箱可以玩 2077 ? |
8
Nitroethane 2021-06-02 01:41:57 +08:00
我没看懂你的描述,是先用 fromelf 生成反汇编文件,然后自己写正则表达式去匹配还是 fromelf 去做?然后你都研究到这么底层了,大致的思路应该有吧。比如函数调用的汇编指令是 call,amd64 架构下函数参数通过寄存器传递,rdi 、rsi 、rdx 、rcx 、r8 、r9 对应第一到第五个参数。不过 call 指令分好几种,自己看汇编手册就知道了。capstone ( https://github.com/aquynh/capstone )可能会有帮助
|
9
XIVN1987 OP @Nitroethane
https://github.com/XIVN1987/JHFView 上面这个是我需要的功能,现在是通过正则表达式分析 fromelf 生成的反汇编解析出函数调用关系,,功能已经实现,,不过 MDK 、IAR 、GCC 三个编译器的反汇编文件格式不一样,,必须分别解析,,而且我担心它们的格式会变动导致之前写的代码失效 所以希望能直接从 elf 文件中解析出函数调用关系 |