繁体   English   中英

为什么删除符号信息后程序可以工作?

[英]Why does the program work after removing the symbol information?

我制作了一个 SO 文件并使用名为“-Xlinker --strip-all”的编译选项对其进行编译,以应对任何逆向工程(使用 clang)。

正因为如此,除了直接暴露在外面的函数之外,大部分函数的符号都不会出现(objdump -TC test.so)。
问题是,如果像这样删除一个符号,它不应该在程序内部使用,所以我认为这是正常的。
我错过了什么?

没错,程序本身不需要调试符号来执行; linker 计算(因此在链接时知道)每个函数/全局变量/等在运行时的内存地址,因此它可以在必要时将该内存地址直接放入可执行文件中。

这些符号供调试器使用,以使调试 output 更易于人类(或调试工具)使用和理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM