Почему не запускается самодельный ехе-шник?
От: qwerpoi  
Дата: 18.12.13 14:16
Оценка:
Пишу прогу, которая должна создать ехе файл с двумя секциями — в одной таблица импорта а в другой код(просто секция куда энтри пойнт ссылается, содержит в себе EBFEh и нули).
Так вот, полученый файл не запускается, но я никак не могу понять, почему? Все поля заголовка просмотрел, но косяк не нашел.
Буду рад помощи, если вас не затруднит.

Вот файл здесь
Еще прикрепил сам экешник.

Может ли проблема быть из-за того, что таблица импортируемых адресов(та, что должна загрузчиком заполниться адресами импортируемых api функций) находится не в самом начале секции?

Винда 8 на компе
pe низкоуровневое программирование
Re: Почему не запускается самодельный ехе-шник?
От: EreTIk EreTIk's Box
Дата: 18.12.13 15:41
Оценка: 4 (1)
Q>Пишу прогу, которая должна создать ехе файл с двумя секциями...
А в заголовке — 3
Re[2]: Почему не запускается самодельный ехе-шник?
От: EreTIk EreTIk's Box
Дата: 18.12.13 15:46
Оценка: 6 (2)
Здравствуйте, EreTIk, Вы писали:

Q>>Пишу прогу, которая должна создать ехе файл с двумя секциями...

ETI>А в заголовке — 3
В догонку:

OS version                 8.00
Subsystem version          8.00


Должно быть Operating System Version
Re[3]: Почему не запускается самодельный ехе-шник?
От: qwerpoi  
Дата: 18.12.13 16:34
Оценка:
Итак, программа у меня заработала.

Здравствуйте, EreTIk, Вы писали:

ETI>Здравствуйте, EreTIk, Вы писали:


Q>>>Пишу прогу, которая должна создать ехе файл с двумя секциями...

ETI>>А в заголовке — 3
ETI>В догонку:

ETI>
ETI>OS version                 8.00
ETI>Subsystem version          8.00
ETI>


ETI>Должно быть Operating System Version


OS version и Subsystem version я такие поставил пытаясь заставить прогу работать)
В заголовке я поставил на одну секцию больше из соображений, что заголовок тоже считается как секция, сейчас поставил обратно два.

Прога заработала после того, как я выровнял имена импортируемых функций на 2, т.е. добавил код, который дописывает нолик, если длинна имени не четная. Т.е. по факту, после MessageBoxA был добавлен один нулевой байт.

Спасибо за участие.
Re[4]: Почему не запускается самодельный ехе-шник?
От: ononim  
Дата: 18.12.13 16:50
Оценка: +1
Q>Прога заработала после того, как я выровнял имена импортируемых функций на 2, т.е. добавил код, который дописывает нолик, если длинна имени не четная. Т.е. по факту, после MessageBoxA был добавлен один нулевой байт.
Насколько мне помниться имена импортов должны быть терминированы нулем. И неважно четной они длины или нет
Как много веселых ребят, и все делают велосипед...
Re[4]: Почему не запускается самодельный ехе-шник?
От: EreTIk EreTIk's Box
Дата: 18.12.13 17:01
Оценка: 2 (1)
Q>Прога заработала после того, как я выровнял имена импортируемых функций на 2, т.е. добавил код, который дописывает нолик, если длинна имени не четная. Т.е. по факту, после MessageBoxA был добавлен один нулевой байт.
Проведем небольшой эксперимент. Поправим a.exe в a_new.exe как указал я:
>fc /b a.exe a_new.exe
Comparing files a.exe and A_NEW.EXE
00000046: 03 02
00000080: 08 05
00000088: 08 05

Пробуем — exe'шник успешно запускается
Re[5]: Почему не запускается самодельный ехе-шник?
От: qwerpoi  
Дата: 19.12.13 13:57
Оценка:
Здравствуйте, EreTIk, Вы писали:

Q>>Прога заработала после того, как я выровнял имена импортируемых функций на 2, т.е. добавил код, который дописывает нолик, если длинна имени не четная. Т.е. по факту, после MessageBoxA был добавлен один нулевой байт.

ETI>Проведем небольшой эксперимент. Поправим a.exe в a_new.exe как указал я:
ETI>
>>fc /b a.exe a_new.exe
ETI>Comparing files a.exe and A_NEW.EXE
ETI>00000046: 03 02
ETI>00000080: 08 05
ETI>00000088: 08 05
ETI>

ETI>Пробуем — exe'шник успешно запускается


Да наверное дело было в количестве секций. Просто я был уверен, что пробовал и так и так. Запутался, извиняюсь.
Действительно, нечетная длина имени импортируемой функции не препятствует запуску, а неверное(увеличенное на 1) число секций приводит к ошибке(я тоже провел эксперимент).

Если интересно, скажу из каких соображений завысил число секций: некогда до этого тоже делал ехе-файл вручную, и он не работал, если число секций не увеличить на одну. Это я помню точно(иначе с чего бы мне увеличивать число секций, не с потолка же?).
Только вот я тогда, вроде, делал файл без секций, код шел после заголовка, и число секций из таких соображений сначала ставил 0, и не работало. Но это я не помню точно.

Спасибо большое, а то так и тупил бы дальше
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.