【问题标题】:#pragma section and attributes#pragma 部分和属性
【发布时间】:2013-03-09 00:00:56
【问题描述】:

只是尝试创建一个新部分并使用#pragma 设置他的属性返回此警告:

警告 C4330:忽略部分“.mysec”的属性“写入”

简单代码:

#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


    【解决方案1】:

    我认为这是由于execute 标志。我认为您不能在 Windows 中拥有包含可写代码的部分。

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

    【讨论】:

    • 此时,不带执行属性的编译不会给出警告。
    • 正如预期的那样。执行标志意味着代码将在该部分中。它不支持可写。删除执行会将其更改为数据部分
    • 是否有任何编译器设置来避免此检查并让一个部分既可执行又可写?
    • 我不知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 2017-10-17
    相关资源
    最近更新 更多