![]() |
eXeL@B —› Вопросы новичков —› генерация PE |
Посл.ответ | Сообщение |
|
Создано: 01 февраля 2010 03:45 · Поправил: alexeyshevchenko · Личное сообщение · #1 Уважаемые Знатоки!!! Прошу вашей помощи после 2 дней "выходных дей ![]() простенькая программка которая выполняет генерацию PE файла простенькой программы .net типо hello world . пример переписан с учебника из-за отсутствия опыта в таких делах не могу понять почему при запуске pe вылазит сообщение "Ошибка запуске приложения 0xc000007b" - программа переписана 1 в 1 из учебника, и вроде бы логически всё сходится! Заранее спасибо! ![]() ![]() ![]() ![]() |
|
Создано: 01 февраля 2010 06:59 · Личное сообщение · #2 |
|
Создано: 01 февраля 2010 16:12 · Личное сообщение · #3 |
|
Создано: 01 февраля 2010 18:25 · Личное сообщение · #4 |
|
Создано: 01 февраля 2010 19:00 · Поправил: alexeyshevchenko · Личное сообщение · #5 ОСНОВЫ ИНФОРМАТИКИ И МАТЕМАТИКИ Серия издается совместно МОСКОВСКИМ ГОСУДАРСТВЕННЫМ УНИВЕРСИТЕТОМ имени М.В. Ломоносова и Интернет-Университетом Информационных Технологий при поддержке корпорации Microsoft ![]() |
|
Создано: 01 февраля 2010 20:08 · Личное сообщение · #6 www.troitsk.org/?t=34888&goto=last вылетает ошибка 0xc000007b , может быть вызвана отсутствием .NET Framework Остальные варианты ответов ищи сам ![]() И какой же это тривиальный пример, когда там тупо бинарные коды заголовка вбиты. Берешь справочники и проверяешь, где там опечатка. Т.к. там еще .NET порылся, то отнюдь не тривиально все будет. ![]() |
|
Создано: 01 февраля 2010 22:47 · Личное сообщение · #7 В Project Properties ставь Struct Member Alignment не больше 2 байт или используй #pragma pack для структуры _JMP_STUB (и возможно еще где-нибудь =), иначе под JmpInstruction выделяется больше 2 байт, что приводит к непредвиденному сдвигу .NET Directory. По крайней мере у меня такая трабла была (VS2008). Но это только одна проблема, прога все равно не хочет пахать. ![]() |
|
Создано: 02 февраля 2010 01:47 · Поправил: alexeyshevchenko · Личное сообщение · #8 в иде выглядит примерно так .cli:00404000 public start .cli:00404000 start proc near .cli:00404000 jmp ds:dword_404086 .cli:00404000 start endp .cli:00404000 .cli:00404000 ; ---------------------------------------------------------------------- ----- .cli:00404006 dw 48h .cli:00404008 dd 20000h, 20000000h, 2140000h, 2 dup(10000h), 600h, 0Bh dup(0) .cli:0040404C db 2 dup(0) .cli:0040404E ; .cli:0040404E ; Imports from mscoree.dll .cli:0040404E ; .cli:0040404E _CorExeMain dd ? .cli:00404052 dd 0 .cli:00404056 dw 407Eh .cli:00404058 dd 2 dup(0) .cli:00404060 dd 40940000h, 404E0000h, 5 dup(0) .cli:0040407C dd 40860000h, 0 .cli:00404084 db 2 dup(0) .cli:00404086 dword_404086 dd 435F0000h ; DATA XREF: startr .cli:0040408A aOrexemain db 'orExeMain',0 .cli:00404094 aMscoree_dll db 'mscoree.dll',0 .cli:004040A0 align 1000h .cli:004040A0 _cli ends .cli:004040A0 .cli:004040A0 .cli:004040A0 end start вот сижу думаю dword_404086 должно быть или _CorExeMain доходит оно вообще до jmp непонятно ... в дебаге сразу падает ![]() |
|
Создано: 02 февраля 2010 12:41 · Личное сообщение · #9 |
|
Создано: 02 февраля 2010 15:41 · Поправил: alexeyshevchenko · Личное сообщение · #10 |
|
Создано: 02 февраля 2010 17:39 · Личное сообщение · #11 |
|
Создано: 02 февраля 2010 22:11 · Поправил: _ruzmaz_ · Личное сообщение · #12 Еще одна ошибка, но в данном случае несущественная) pe.cpp, строка 293 -> cls.JMP_STUB.JmpAddress = RVA_OF_CLI(inP) + OFFSETOF(struct CLI_SECTION_IMAGE, IMPORT_TABLE.Hint) + inP->ImageBase; ... благодаря чему прыжок с EP, если что, будет делаться не по адресу, лежащему в IAT, а на 0x435F0000 (Hint функи _CorExeMain + первые два байта названия =) Надо cls.JMP_STUB.JmpAddress = RVA_OF_CLI(inP) + OFFSETOF(struct CLI_SECTION_IMAGE, IMPORT_TABLE.HintNameTableRVA2) + inP->ImageBase; ![]() |
|
Создано: 03 февраля 2010 02:06 · Поправил: alexeyshevchenko · Личное сообщение · #13 |
|
Создано: 03 февраля 2010 14:51 · Личное сообщение · #14 alexeyshevchenko а вообще какая конечная цель? там пример какойто странный, я не встречал секцию .cli у net прог. Можешь скомпилить прогу на C# и из неё сделать шаблон. получится примерно тоже самое, что в книге, только ошибку будет проще искать. А если ты хочеш собирать чо нить серьёзное, то придётся плотно изучать формат. ----- zzz ![]() |
|
Создано: 03 февраля 2010 20:43 · Личное сообщение · #15 Цель изучить формат PE содержащий . Net ! Чтобы сделать шаблон из проги скомпилиной на C# надо как минимум знать форамт файла наизусть до последнего бита ... Получается колизея ))) эмн насчёт .cli меня тоже удивило в книге написано что там нранится загоовок именно уже для нужд CLR ! Вообщето во всех книгах написано что там хранится заголовок clr притом на него должна указывать 15 секция данныхточный формат можно посмотреть в corhdr.h структура image_cor20_header corhdr долженбыть в WinSdk если vs стоит то и corhdr тоже на компе будет. Вобщемто в самих исходниках приатаченых чтото напутано с image_cor20_header corhdr , там заполняется какаято другая структура а image_cor20_header corhdr непонятно зачем ![]() |
|
Создано: 03 февраля 2010 22:54 · Личное сообщение · #16 |
|
Создано: 03 февраля 2010 23:49 · Поправил: Модератор · Личное сообщение · #17 а нет извеняюсь в спецификации на 179 странице есть полное описание pe не умеешь править? давай я это сделаю за тебя ![]() |
![]() |
eXeL@B —› Вопросы новичков —› генерация PE |