#pragma 部分和属性

问题描述 投票:0回答:2

只是尝试创建一个新部分并使用 #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 但没有找到答案。

谢谢。

visual-c++ portable-executable
2个回答
4
投票

我认为这是由于

execute
标志造成的。我不认为你可以有一个包含 Windows 中可写代码的部分。

我可能记错了,但这会是一个安全问题,因此不支持。


1
投票

您可以使用链接器命令行 ->

/SECTION:.mysec,RWE
,完美运行。

您还可以使用 CFF Explorer 等工具将节标志更改为 E0000040 或手动解析 PE 文件并更改它。

© www.soinside.com 2019 - 2024. All rights reserved.