Сейчас на форуме: asfa, _MBK_ (+6 невидимых)

 eXeL@B —› Вопросы новичков —› генерация PE
Посл.ответ Сообщение

Ранг: 7.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 01 февраля 2010 03:45 · Поправил: alexeyshevchenko
· Личное сообщение · #1

Уважаемые Знатоки!!! Прошу вашей помощи после 2 дней "выходных дей " потраченых на поиски ошибки в программе...
простенькая программка которая выполняет генерацию PE файла простенькой программы .net типо hello world . пример переписан с учебника
из-за отсутствия опыта в таких делах не могу понять почему при запуске pe вылазит сообщение "Ошибка запуске приложения 0xc000007b" - программа
переписана 1 в 1 из учебника, и вроде бы логически всё сходится! Заранее спасибо!



Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 01 февраля 2010 06:59
· Личное сообщение · #2

alexeyshevchenko
Где инфа? Кроме жалоб на свою тяжкую судьбу и не ничё
какая книжка? какая прога? где ссылки?



Ранг: 7.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 01 февраля 2010 16:12
· Личное сообщение · #3

проект на VS2008 c++

9483_01.02.2010_CRACKLAB.rU.tgz - pegen.rar




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 01 февраля 2010 18:25
· Личное сообщение · #4

пример переписан с учебника

Какой учебник?

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 7.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 01 февраля 2010 19:00 · Поправил: alexeyshevchenko
· Личное сообщение · #5

ОСНОВЫ ИНФОРМАТИКИ И МАТЕМАТИКИ
Серия издается совместно
МОСКОВСКИМ ГОСУДАРСТВЕННЫМ УНИВЕРСИТЕТОМ
имени М.В. Ломоносова
и
Интернет-Университетом
Информационных Технологий
при поддержке корпорации
Microsoft

http://window.edu.ru/window_catalog/pdf2txt?p_id=30776&p_page=1



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 01 февраля 2010 20:08
· Личное сообщение · #6

www.troitsk.org/?t=34888&goto=last

вылетает ошибка 0xc000007b ,
может быть вызвана отсутствием .NET Framework
Остальные варианты ответов ищи сам
И какой же это тривиальный пример, когда там тупо бинарные коды заголовка вбиты.
Берешь справочники и проверяешь, где там опечатка. Т.к. там еще .NET порылся, то отнюдь не тривиально все будет.



Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 01 февраля 2010 22:47
· Личное сообщение · #7

В Project Properties ставь Struct Member Alignment не больше 2 байт или используй #pragma pack для структуры _JMP_STUB (и возможно еще где-нибудь =), иначе под JmpInstruction выделяется больше 2 байт, что приводит к непредвиденному сдвигу .NET Directory. По крайней мере у меня такая трабла была (VS2008).
Но это только одна проблема, прога все равно не хочет пахать.



Ранг: 7.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 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 непонятно ... в дебаге сразу падает




Ранг: 127.3 (ветеран), 44thx
Активность: 0.090
Статус: Участник

Создано: 02 февраля 2010 12:41
· Личное сообщение · #9

alexeyshevchenko пишет:
проект на VS2008 c++

у меня почему то fopen("hello.exe","wb"); не создаёт фаил. а если без b то создаёт. почему так?

-----
zzz




Ранг: 7.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 02 февраля 2010 15:41 · Поправил: alexeyshevchenko
· Личное сообщение · #10

http://devoid.com.ua/functions-about/c-functions/fopen.html
посмотри что она вернёт когда не создаёт




Ранг: 127.3 (ветеран), 44thx
Активность: 0.090
Статус: Участник

Создано: 02 февраля 2010 17:39
· Личное сообщение · #11

разобрался, это пакастный нод, в тихоря отправлял фаил в карантин)

-----
zzz




Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 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;



Ранг: 7.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 февраля 2010 02:06 · Поправил: alexeyshevchenko
· Личное сообщение · #13

сейчас я переписываю это на c# дмаю там больше шансов что заработает
удя по всему с++ както выравнивает поля не так , дело в том что пример в книге реализован на си, при переносе на с++ чото работает не так как ожидалось , что именно не понтно




Ранг: 127.3 (ветеран), 44thx
Активность: 0.090
Статус: Участник

Создано: 03 февраля 2010 14:51
· Личное сообщение · #14

alexeyshevchenko
а вообще какая конечная цель?
там пример какойто странный, я не встречал секцию .cli у net прог.
Можешь скомпилить прогу на C# и из неё сделать шаблон. получится примерно тоже самое, что в книге, только ошибку будет проще искать.
А если ты хочеш собирать чо нить серьёзное, то придётся плотно изучать формат.

-----
zzz




Ранг: 7.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 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 непонятно зачем




Ранг: 127.3 (ветеран), 44thx
Активность: 0.090
Статус: Участник

Создано: 03 февраля 2010 22:54
· Личное сообщение · #16

alexeyshevchenko
попробуй вот такое.
www.rsdn.ru/article/dotnet/phmetadata.xml
www.ecma-international.org/publications/standards/Ecma-335.htm

-----
zzz




Ранг: 7.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 03 февраля 2010 23:49 · Поправил: Модератор
· Личное сообщение · #17

http://www.rsdn.ru/article/dotnet/phmetadata.xml видел уже там про мето данные меня пока это не интересует , в спецификации тое про мето данные есть , а то что надо нету
а нет извеняюсь в спецификации на 179 странице есть полное описание pe
не умеешь править? давай я это сделаю за тебя


 eXeL@B —› Вопросы новичков —› генерация PE
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати