Просто пытаясь создать новый раздел и настраивая его атрибуты с помощью #pragma, верните это предупреждение:
предупреждение C4330: атрибут 'write' для раздела '.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, но не нашел ответа.
Спасибо.
2 ответа
Я думаю, что это из-за флага execute
. Я не думаю, что у вас может быть раздел, содержащий записываемый код в Windows.
Возможно, я запомнил это неправильно, но это проблема безопасности и поэтому не поддерживается.
Вы можете использовать командную строку компоновщика -> /SECTION:.mysec,RWE
, отлично работает.
Также вы можете использовать такой инструмент, как CFF Explorer, чтобы изменить флаг раздела на E0000040 или вручную проанализировать свой PE-файл и изменить его.
Похожие вопросы
Новые вопросы
visual-c++
Microsoft Visual C++ — это компилятор C, C++ и C++/CLI для Windows. Самая последняя версия компилятора — Visual C++ 2022. Компилятор поддерживает следующие языки: C (поддерживает C90 и большинство частей C99, C11, C17 стандарта ISO C++ по состоянию на Visual Studio 2022); C++ (поддержка большинства функций C++11, C++14, C++17 и C++20 и нескольких функций C++23 по состоянию на Visual Studio 2022) C++/CLI (обеспечивает взаимодействие с языками .NET, такими как C#).