MSVC从二进制

时间:2016-05-31 18:43:48

标签: visual-studio visual-c++

在我的代码中,我有一个特殊的部分和一些数据:

#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文件中删除整个部分?

1 个答案:

答案 0 :(得分:0)

我也在寻找一个链接器设置,但似乎这对MSVC来说根本不可能。 您可以做的是编写自己的工具来从PE文件中删除部分,或者使用CFF Explorer。

相关问题