[英]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.