Запуск PE файла из памяти
Вопросы следующие
1.Как,сколько и где под него правильно выделить память?
2.Как правильно расположить его образ в этом выделенном участке памяти?
3.Как быть с таблицей импорта?
4.Как передать управление на его точку входа и при этом высвободить память от загрузчика?
Очень интересуют примеры на С .На асемблере и паскале находил но эти языки я слишком плохо знаю :(
1.Как,сколько и где под него правильно выделить память?
2.Как правильно расположить его образ в этом выделенном участке памяти?
3.Как быть с таблицей импорта?
4.Как передать управление на его точку входа и при этом высвободить память от загрузчика?
читай документацию по формату PE. В пунктах 1 и 2 при мэпинге теперь может помочь флаг SEC_IMAGE.
Очень интересуют примеры на С .На асемблере и паскале находил но эти языки я слишком плохо знаю :(
а вот это очень плохо! понимаешь: НАДО ЗНАТЬ!!! как минимум чтобы мог понять что там делается, и написать это на С.
А какой смысл НЕ грузить?
Ну насколько я понял в памяти ещё будут оставатся эти части от файла А и тогда неясно зачем грузить эти части файла Б
А это точно статья.А то мне гугл выдал вот это http://books.google.com.ua/books?id=h34d_jr2iikC&dq=linkers+and+loaders
ЗЫ:подскажите нормальное описание спецификации PE файлов ,а то через гугл можно найти только тупые цитирования из WINNT.h
Я на нее знаю такую ссылку
М-да... и это только начало...
Это элементарнейший вопрос, на который ты и сам бы мог найти ответ.
Если ты не можешь справиться с этим, то врядли тебе удастся реализовать то, что ты задумал, т.к задача не так проста, как может показаться, но не теми вопросами, котрые ты задаешь.
Вот ссылки, читай, учись:
http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx
http://rsdn.ru/article/baseserv/pe_coff.xml
http://www.wasm.ru/article.php?article=green2red02
http://www.wasm.ru/doclist.php?list=2
а вот это вообще практически полностью освещает твою проблему:
http://www.joachim-bauch.de/tutorials/load_dll_memory.html
http://www.wasm.ru/article.php?article=packlast01
http://www.wasm.ru/article.php?article=packers2
P.S. Я разработал очень оригинальный способ загрузки исполняемых файлов (как Native, так и Managed) из памяти и даже запуска процессов из памяти (т.е. можно создать процесс не связаный с каким-либо файлом). Даже написал тестовый EXE-пакер (не путайте с тем, что выкладывал на форуме, тот уже прошлый век). Теперь вот думаю, куда бы пристроить ($$$) эту инновационную технологию...
Но лучше всего call, т.е. просто вызов ф-ции по указателю: pMain()
Тип указателя и чем инициализировать, догадайся сам, раз уж начал понимать структуру PE.
да, точно. но не факт что в этой функции будет в конце ret, там может быть просто ExitProcess, поэтому толку от call будет мало.
Сейчас я научу тебя азам великого мастерства хакерства.
Если тебе что-то непонятно, то первым делом нажо не бежать в форум, а попытаться найти ответ самому. Например, с помощью хакерского инструмента Google:
http://www.google.ru/search?q=NTSIGNATURE&sourceid=navclient-ff&ie=UTF-8&rlz=1B3GGGL_ruRU213RU213
См. первую же ссылку.