| 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  | 
| 
 | 
Создано: 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  | 
| eXeL@B —› Вопросы новичков —› генерация PE | 

" потраченых на поиски ошибки в программе...
 


 




 Для печати