[英]how can I verify that dead code was stripped from the binary?
我的c / obj-c代码(使用clang构建的iOS应用)具有#ifdefs
排除的某些功能。 我想确保从那些函数而不是从其他函数调用的代码(死代码)在链接时被剥离(消除)。 我试过了:
strings
时,该字符串仍然可见。 在您问之前,我正在为发布做准备,并且所有剥离设置(显然包括死代码剥离)都已启用。
这个问题并不是真的针对xcode / apple / iOS。 我认为答案在任何POSIX开发平台上都应该几乎相同。
(编辑)
在binutils中, ld
具有--gc-sections
选项,该选项可以执行对象级别的节所需的操作。 您有几种选择:
使用gcc
的标志-ffunction-sections
和-fdata-sections
将每个符号分隔成自己的部分,然后使用--gc-sections
;
将所有要删除的候选文件放到一个单独的文件中,链接器将可以删除整个节;
分解生成的二进制文件,删除无效代码,然后再次组装;
使用带有适当-N
选项的strip
从符号表中丢弃有问题的符号-这会将代码和数据保留在此处,但不会显示在符号表中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.