2014-10-20 2 views
-1

Я создал простой MessageBox, используя nasm в Windows 7, и я был немного недоволен размером сгенерированного файла: 2.51 kb.Вручную создать PE

extern MessageBoxA 
extern ExitProcess 

import MessageBoxA user32.dll 
import ExitProcess kernel32.dll 

section .text use32 

..start: 

push 0 
push sCapt 
push sText 
push 0 
call [MessageBoxA] 


push 0 
call [ExitProcess] 

section .data 

sCapt db 'test', 0 
sText db 'test2', 0 

Итак, я открыл исполняемый файл в OllyDbg, и, похоже, он генерировал много ненужных вещей.

ollydbg

Так, чтобы узнать немного больше, я хотел бы сделать эту программу непосредственно в шестнадцатеричном, чтобы остаться с минимально возможным размером! Я искал, но не нашел ничего, обучая тому, как создать исполняемый файл PE вручную.

Если кто-то может дать мне ссылки или объяснить, как это сделать, я был бы благодарен!

+2

Вы можете найти [это] (http://www.phreedom.org/research/tinype/) интересно. –

+0

Nasm фактически не генерировал все эти нули, это просто неиспользуемое пространство на странице загрузки. Поскольку размер страницы фиксирован (при сохранении памяти 4K), он должен содержать * что-то *. – usr2564301

+0

Скачайте больше RAM. –

ответ

4

Вы можете сделать программу немного меньше, перейдя по параметрам aligment раздела компоновщика, но результат, вероятно, не будет строго соответствовать правилам выравнивания для изображений Win32 PE. EXE, скорее всего, будет работать в любом случае, но кто-то - или какая-то часть Windows или WINE или ReactOS - может действительно полагаться на эти правила, то есть вы были бы открыты для Heisenbugs.

Таким образом, в What is the smallest possible Windows (PE) executable? вы можете найти необходимую информацию, чтобы сделать мельчайший возможный рабочий PE. Соответствующая страница, связанная с ней, - Tiny PE, где Александр Сотиров описывает трюки, которые идут на создание мельчайшего возможного EXE. Как накладывающиеся структуры заголовков, складывание их на себе и так далее ...

wiki article on the PE format имеет обзор и немало полезных ссылок.

P.S .: некоторые более мелкие исполняемые файлы могут загружать несколько микросекунд медленнее, чем правильно выровненные, если их сопоставление в памяти сложнее, чем необходимо. Кроме того, не должно быть каких-либо заметных различий в времени загрузки для любого размера до одной страницы (например, 4 КБ на большинстве систем Win32), если только вы не имеете дело с гибкими дисками и другими носителями, у которых есть сектора, меньшие, чем Windows размер страницы. В любом случае он должен быть затмеван из-за накладных расходов на создание процесса (адресное пространство и т. Д.) И динамическое связывание.

+0

Но я действительно хочу сделать PE с нуля! –

+1

@ user3448245: страница TinyPE на самом деле показывает вам, как это сделать –

Смежные вопросы