1
节在我的代码,我在这一个特殊的部分和一些数据:MSVC删除二进制
#pragma section("dead",read,discard)
__declspec(allocate("dead"))
static const char dead_str[] = "DEAD";
doSomething(dead_str);
这部分可能会或可能不会加载该程序,但仍然是二值图像的一部分。我想要做的就是将它从图像中彻底删除,以确保它不被加载,并且在二进制文件中找不到它。基本上,我想:
strings myprogram.exe | grep DEAD
没有命中。当我尝试引用字符串时,程序崩溃时我很好。
在GNU,我会做:
objcopy --remove-section=dead myprogram.exe
和Cygwin的objcopy
其实这样做,但破坏可执行文件,因此可以不再负担。来自MSVC的editbin.exe
可以更改该部分的标志,但它保留在图像中。链接器优化不会删除dead_str
,因为它在doSomething()
中被引用。
是否有某种方法(理想情况下是链接器标记)我可以从PE/COFF文件中删除整个部分?