Как указать флаг эмуляции x64 (EC_CODE) для разделов общей памяти для Windows ARM64?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как указать флаг эмуляции x64 (EC_CODE) для разделов общей памяти для Windows ARM64?

Сообщение Anonymous »

Я работаю над приложением, которое использует разделы общей памяти между процессами в Windows (для механизма IPC между процессами, где один процесс генерирует код, который выполняется другим процессом). На устройствах Windows ARM64 я считаю, что общая память x64 не переводится/эмулирована, вызывая сбои. распознается как действительный параметр (

Код: Выделить всё

0xC000000D
).

Код: Выделить всё

HANDLE hSection;
LARGE_INTEGER sectionSize = {0x8000};
NtCreateSection(&hSection, SECTION_ALL_ACCESS, nullptr,
&sectionSize, PAGE_EXECUTE_READWRITE, SEC_COMMIT, nullptr);

MEM_EXTENDED_PARAMETER extParam = {0};
extParam.Type = MemExtendedParameterAttributeFlags;  // Value is 5
extParam.ULong64 = MEM_EXTENDED_PARAMETER_EC_CODE;   // 0x40

PVOID baseAddress = nullptr;
LARGE_INTEGER sectionOffset = {0};
SIZE_T viewSize = 0x8000;

NTSTATUS status = NtMapViewOfSectionEx(
hSection,
targetProcess,
&baseAddress,
&sectionOffset,
&viewSize,
0, // AllocationType
PAGE_EXECUTE_READWRITE,
&extParam,
1 // ExtendedParameterCount
);
< /code>
используется подпись: < /p>
typedef NTSTATUS(NTAPI* NtMapViewOfSectionEx)(HANDLE SectionHandle, HANDLE ProcessHandle, PVOID* BaseAddress, PLARGE_INTEGER SectionOffset, PSIZE_T ViewSize, ULONG AllocationType, ULONG Win32Protect, PMEM_EXTENDED_PARAMETER ExtendedParameters, ULONG ExtendedParameterCount);
Без mem_extendend_parameter_ec_code Сопоставление удалось, но не удалось на устройствах Windows ARM64. Я знаю, что virtualalloc2 должен работать, но это против моего варианта использования.

Код: Выделить всё

NtMapViewOfSectionEx
был опробован с флагом EC_CODE, чтобы отметить его как код x64. Результатом является 0xc000000d - API не принимает EC_CODE? При использовании ntmapviewofsectionex без ec_code он работает. Я не уверен, что необходимо для того, чтобы эти разделы были переведены. Флаг, похожий на то, как работает Virtualalloc2.

Подробнее здесь: https://stackoverflow.com/questions/797 ... -for-arm64
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»