Я пишу программу на C и использую встроенный asm.В коде встроенного ассемблера есть несколько адресов, где я хочу их исправлять во время выполнения.
Быстрый пример кода такой:
void __declspec(naked) inline(void)
{
mov eax, 0xAABBCCDD
call 0xAABBCCDD
}
Скажите, что я хочу изменить 0xAABBCCDDзначение из основной программы C.То, что я пытался сделать, это вызвать VirtualProtect и является указателем функции, чтобы сделать его доступным для записи, а затем вызвать memcpy, чтобы добавить соответствующие значения в код.
DWORD old;
VirtualProtect(inline, len, PAGE_EXECUTE_READWRITE, &old);
Однако VirtualProtect завершается ошибкой и GetLastError() возвращает 487, что означает доступ к неверному адресу.Кто-нибудь имеет представление об этой проблеме?Спасибо