如何告诉 ld 链接到共享对象中的本地符号?

逆向工程 符号 海湾合作委员会 动态链接
2021-06-16 04:24:50

共享对象中的符号可以是局部的,也可以是全局的。这是由符号表中的标志控制的。如果符号是本地的,ld 不会解析到它。

逆向工程通常可以通过这样做来帮助进行,通过链接共享对象并引用其符号(例如printf("%p", main_arena)。由于所有信息都在那里,并且它只有一个标志告诉 ld 忽略这一点,应该可以告诉 ld 解决一个本地符号也是如此。我该怎么做?

请注意,一个简单的标志补丁是不够的:

objcopy --globalize-symbol=main_arena libc-2.30.so libc-2.30.global_symbols.so

即使符号现在被列为全局符号,ld仍然无法找到它,因为所有全局符号都必须在任何本地符号之前(参见https://github.com/lief-project/LIEF/issues/112),也许对于其他问题(参见https://stackoverflow.com/questions/6527014/making-a-local-symbol-global)。重建整个符号表是可能的,但这会引入我们不想要的其他更改。我们想要的只是告诉ld“请打破规则并解析本地符号,就像 gdb 一样。”

0个回答
没有发现任何回复~