Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Минимальный размер PE программы  (Прочитано 6776 раз)
0 Пользователей и 1 Гость смотрят эту тему.
хАмяк
Гость
« : 13-05-2005 17:04 » 

Возможно ли написать программу, сохраненную в формате Win32 PE 4.0, меньшую, чем 1 кб ? Да, я знаком с этим форматом и знаю, что выравнивание не может быть меньшим 512 байт, а сам файл не может состоять меньше чем из двух секций (собственно заголовок MZ+PE и секция кода). Но может быть есть какие-то хитрости, с помощью которых можно написать программу меньшего размера?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 13-05-2005 18:55 » 

Вопрос: зачем и есть ли смысл?
Если ты хочешь сделать программу для DOS, то делай com.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
dimedrol
Помогающий

ru
Offline Offline

« Ответ #2 : 13-05-2005 19:03 » 

Можно конечно. Хороший компилер(имхо MASM)+линкер(MASM или C)+выравнивание например 0x10 - exe с единственным
ExitProcess(0) у меня весит уже 688 байт Ага ! Выравнивание задается при линковке и для выше приведенных линкеров задается ключем /ALIGN, вот так
/ALIGN:0x10.
Однако и это не предел. Ради искусства, можно сделать следующий трюк для dll: открыть dll в редакторе PE (LordPE например) и выставить число секций=1 (минимум чтоб грузилось, оставить секцию кода) далее
обнуляем записи Directory Entries ,после этого меняем OEP dll на известный внутри exe (там будет своеобразная DllEntry), который будет грузить dll, dllentry=EP+DllImageBase. DllImageBase надо ставить так, чтобы по нему гарантированно не было ничего загружено, иначе система переместит dll, я брал imageBase=0x1000000.
После чего открываем блокнот и обрезаем внутренности dll по самые помидоры, те имена секций (идут где-то после PE заголовка), точнее секции (за секцией кода ".text")
например у меня по строчке".rdata". Тут конечно нужна сноровка, да и имена секций могут быть другие в зависимости от компилера, но результат стоит этих извращений- 450 байт!!! :cool:

PS Если это вопрос принципа - тогда понятно, но если для практики - имхо нафиг не надо..
« Последнее редактирование: 13-05-2005 19:05 от dimedrol » Записан

Как говориться, cемь бед - один Reset Улыбаюсь
хАмяк
Гость
« Ответ #3 : 16-05-2005 11:53 » new

RXL:
только ради интереса.

dimedrol:
Огромный thank. C LordPE что-то никак не могу разобраться Улыбаюсь, но в общем въехал что откуда и куда.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines