如何在 Ghidra 和 Radare2 中正确找到外部功能代码?

逆向工程 雷达2 吉德拉 小精灵
2021-06-29 17:30:22


这是在主函数中调用外部函数(get_random_name)的代码

push {fp, lr}
add fp, sp, 4
sub sp, sp, 0x1d8
str r0, [fp, -0x1d8]     
str r1, [fp, -0x1dc]      
sub r3, fp, 0x44
mov r0, r3
bl sym.imp.get_random_name
... ...

如果我去函数 get_random_name,

;-- get_random_name:
add ip, pc, 0, 12
add ip, ip, 8, 20
ldr pc, [ip, 0x9b0]!

我认为这不是 get_random_name 的真正代码。
怎样才能正确找到这个功能码?
我应该在其他文件或库上搜索此代码吗?我现在正在使用 Ghidra 和radare2。

1个回答

第二段代码是所谓的 PLT(程序链接表)thunk。它从 GOT(全局偏移表)中检索指向目标函数的指针并跳转到它。GOT 指针通常在程序启动时由动态加载器(ld.so 或类似物)填充。所以确实,真正的功能应该在依赖的共享库之一中。