为什么一个可执行文件strip掉符号表还能执行?

通常针对C/C++来说,符号表是程序编译过程中链接必须的,而不是运行时必须。(当然如果有符号表,调试器会来解析地址)编译完以后就只有地址了。
而针对OC这类函数来说,又是另外一回事,本身OC的类和C++的类就不同。一个在运行时,一个在编译时。所以就算把符号表去掉以后,OC的函数符号还是能恢复,因为macho中有很多段保存了这些类信息。
具体可以看我写起写过的一篇文章
Frida调用栈符号恢复

5 个赞