изменение содержимого dll - PullRequest
1 голос
/ 17 мая 2011

Это для домашнего задания.

Я должен изменить содержимое функции dll и добавить в нее ошибку (0xCC).После загрузки функции dll и изменения ее защиты на PAGE_EXECUTE_READWRITE.

у меня возникла проблема с установкой в ​​ней кода ошибки.Я попробовал следующее (я удалил не интересные вещи):

typedef BOOL (*pfn)();

HMODULE hModule=LoadLibrary("somedll");

pfn somefunc=(pfn)GetProcAddress(hModule,"somefunction");

VirtualProtect (somefunc,dwSize,PAGE_EXECUTE_READWRITE,&dwOldProtect);

BYTE *p = (BYTE*)somefunc;

*p = 0xCC;

Когда я выполняю somefunc, вместо того, чтобы получить исключение, он работает без проблем.Почему это так, и я делаю не так?

Как переписать функцию?

Ответы [ 2 ]

0 голосов
/ 17 мая 2011

Вероятно, VirtualProtect вернул ошибку.Проверьте возвращаемое значение (BOOL) и, если false, используйте GetLastError, чтобы проверить причину.

Обратите внимание, что VirtualProtect должен быть совместим с доступом, предоставленным при вызове VirtualAlloc, который выделил память.Это то, что вы не можете контролировать, так как VirtualAlloc вызывается внутри LoadLibrary.

Другое дело, что указатель, предоставляемый VirtualProtect, должен быть начальным адресом этой страницы памяти, а указанный вами указатель на функцию, скорее всего, нет.Ваша функция может быть где угодно внутри страницы, вам придется настроить ее до ближайшего начала страницы раньше.

Интерес:

http://support.microsoft.com/kb/127904 (в основном то, что вы делаете, но требуется еще несколько шагов)

http://www.joachim -bauch.de / tutorials / loading-a-dll-from-memory / (может быть полезно для подробностей о механизме загрузки DLL)

0 голосов
/ 17 мая 2011

Откуда вы знаете, что функция работает успешно? Можете ли вы запустить свой код в отладчике (например, OllyDbg) и убедиться, что:

  1. Ваш код пишет 0xCC по определенному адресу,
  2. 0xCC успешно написано,
  3. И нет исключения для кода операции 0xCC.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...