C - встроенное исправление asm во время выполнения - PullRequest
1 голос
/ 22 декабря 2011

Я пишу программу на 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, что означает доступ к неверному адресу.Кто-нибудь имеет представление об этой проблеме?Спасибо

1 Ответ

1 голос
/ 22 декабря 2011

Разве это не работает?

int X = 0xAABBCCDD;

void __declspec(naked) inline(void)
{
      mov eax, [X]
      call [X]
}
...