Здравствуйте, explorus, Вы писали:
E>разобрался, теперь и под вистой работает
А в чём проблема, разобрался? Я сначала подумал, что возникает гонка подобная FreeLibrary & ExitThread, но в коде её не увидел. А про отладчик ты и сам должен знать
Что не понравилось — VirtualAlloc на каждую секцию PE, на каких-то образах это сработает, на каких-то нет, из-за разной гранулярности VirtualAlloc и выравнивания секций. Ну это, как оказывалось, наследие
статьиАвтор(ы): Максим М. Гумеров
Дата: 20.03.2003
Не вдаваясь в подробности, скажу лишь, что исследование было начато ради сокрытия использования программой на Delphi некоей DLL (написанной на VC++). То есть оператор видит один только Exe-файл, запускает его, а тот каким-то образом подключает функции, содержащиеся изначально (при компиляции проекта) в некоторой DLL.
. И выгрузка в статье сделана (почти) как в последнем твоем варианте.
И так есть файл на диске, и так есть MapViewOfFile — можно добавить SEC_IMAGE, и выкинуть половину кода

Или можно вычитывать файл сразу в образ в памяти, как сделано
здесь в load_image.
E>решение простое: VirtualFree( g_hLoadedModule, 0, MEM_DECOMMIT | MEM_RELEASE );
E>я сперва перемудрил немного
MSDN о MEM_RELEASE -
Do not use this value with MEM_DECOMMIT
Возвращаемые API значения не проверяются, поэтому исправление вероятно аналогично
если закоментарить строчку с VirtualFree( g_hLoadedModule, 0, MEM_RELEASE ); тогда все работает
.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth