Сейчас на форуме: tyns777, zombi-vadim (+3 невидимых) |
![]() |
eXeL@B —› Программирование —› PE loader |
Посл.ответ | Сообщение |
|
Создано: 07 января 2008 23:37 · Личное сообщение · #1 Итак решил написать простейший PE лоадер. Правда столкнулся с проблемой: при вызове некоторых API уже запущенным из памяти приложением происходит ошибка, так как происходит обращение к несуществующему адресу (00430C5C (пример)). В чем может быть ошибка? З.Ы.: ImageBaseAddress в PEB исправляю. З.З.Ы.: критика, связанная с офрмление кода, привествуется =) www.everfall.com/paste/id.php?2yrizlxr5q8s код www.everfall.com/paste/id.php?lvawyn29joir load.h файл ![]() |
|
Создано: 07 января 2008 23:58 · Поправил: El_Diablo · Личное сообщение · #2 Кажется,понял в чем ошибка,но хз как исправить UnmapViewOfFile((LPCVOID)dwAddress); вызовом этой процедуру мы подгот авливаем память к записи туда наело подопытного файла. как правило, ImageBase(dwAddress = ImageBase файла) подопытных равен 00400000. Но по этому адресу у нас спроецирована одна из системных билиотек(user32.dll), которая необходима нашему процессу. ![]() |
|
Создано: 08 января 2008 00:23 · Личное сообщение · #3 |
|
Создано: 08 января 2008 00:57 · Личное сообщение · #4 |
|
Создано: 08 января 2008 01:09 · Личное сообщение · #5 так точнее, хотя тоже самое; а вообще структуры лучше проверить по не одному источнику, т.к. многие в них как нарочно корявки вставляют. struct _PEB_LDR_DATA { unsigned long Length; unsigned char Initialized; void* SsHandle; struct _LIST_ENTRY InLoadOrderModuleList; struct _LIST_ENTRY InMemoryOrderModuleList; struct _LIST_ENTRY InInitializationOrderModuleList; } ![]() |
|
Создано: 08 января 2008 10:55 · Личное сообщение · #6 |
|
Создано: 08 января 2008 15:38 · Личное сообщение · #7 El_Diablo пишет: UnmapViewOfFile((LPCVOID)dwAddress); вызовом этой процедуру мы подгот авливаем память к записи туда наело подопытного файла. На самом деле это ничто иное как расстрел памяти и приводит к ошибкам 2го порядка (когда ошибка напрямую не проявляется, а приводит к появлению другой ошибки). З.Ы. По поводу оформления - больше похоже на асм, чем на С; поищи книгу Ален Голуб "Веревка достаточной длины, что бы встрелить себе в ногу". ![]() |
|
Создано: 10 января 2008 12:17 · Личное сообщение · #8 |
|
Создано: 12 января 2008 22:10 · Личное сообщение · #9 |
|
Создано: 13 января 2008 00:53 · Личное сообщение · #10 |
|
Создано: 25 февраля 2008 17:25 · Личное сообщение · #11 Тоже есть вопрос про PE Loader. Loader имеет базу 0x400000. Файл калькулятора XP SP2 - 0x01000000. Пытаюсь исправить ImageBase модуля с 0x400000 на 0x01000000 следующим образом: mov eax, fs:[30h] mov eax, [eax+0Ch] mov eax, [eax+0Ch] lea ecx, [eax+18h] mov eax, dwNewBase mov dword ptr [ecx], eax Но GetModuleHandleA все равно возвращает старую базу и файл не запускается. ![]() Я с PEB мало знаком, подскажите ошибку. Простые файлы без ресурсов\GUI запускаются нормально. ![]() |
|
Создано: 25 февраля 2008 18:39 · Поправил: HiEndsoft · Личное сообщение · #12 |
|
Создано: 25 февраля 2008 18:57 · Поправил: GlOFF · Личное сообщение · #13 |
|
Создано: 25 февраля 2008 21:42 · Личное сообщение · #14 В архиве, а так начни хотя бы с прочтения Шрайбера. ![]() ----- продавец резиновых утёнков ![]() |
|
Создано: 25 февраля 2008 22:29 · Поправил: UsAr · Личное сообщение · #15 |
|
Создано: 25 февраля 2008 22:40 · Личное сообщение · #16 |
|
Создано: 26 февраля 2008 00:02 · Личное сообщение · #17 |
![]() |
eXeL@B —› Программирование —› PE loader |