只是尝试创建一个新部分并使用 #pragma 设置他的属性返回此警告:
警告 C4330:忽略部分“.mysec”的属性“write”
简单代码:
#include <windows.h>
#include <stdio.h>
#pragma section(".mysec",execute,read,write)
__declspec(allocate(".mysec")) UCHAR var[] = {0xDE, 0xAD, 0xBE, 0xEF};
void main() { return; }
链接器选项:/DYNAMICBASE:NO、/FIXED、/NXCOMPAT:NO、/OPT:NOREF
操作系统/工具:Win x64 / msvc++ 110
我在 MSDN 上阅读了一些文章,特别是这篇 http://msdn.microsoft.com/en-us/library/50bewfwa(v=vs.110).aspx 但没有找到答案。
谢谢。
我认为这是由于
execute
标志造成的。我不认为你可以有一个包含 Windows 中可写代码的部分。
我可能记错了,但这会是一个安全问题,因此不支持。
您可以使用链接器命令行 ->
/SECTION:.mysec,RWE
,完美运行。
您还可以使用 CFF Explorer 等工具将节标志更改为 E0000040 或手动解析 PE 文件并更改它。