LINUX.ORG.RU

Самый маленький бинарник.


0

0

; tiny.asm

BITS 32

org 0x00001000

db 0x7F, "ELF" ; e_ident
dd 1 ; p_type
dd 0 ; p_offset
dd $$ ; p_vaddr
dw 2 ; e_type ; p_paddr
dw 3 ; e_machine
dd filesize ; e_version ; p_filesz
dd _start ; e_entry ; p_memsz
dd 4 ; e_phoff ; p_flags
_start:
mov bl, 42 ; e_shoff ; p_align
xor eax, eax
inc eax ; e_flags
int 0x80
db 0
dw 0x34 ; e_ehsize
dw 0x20 ; e_phentsize
db 1 ; e_phnum
; e_shentsize
; e_shnum
; e_shstrndx


filesize equ $ - $$

Сей код был надыбан мной на одном из сайтов посвящённых кодингу на асме под пингвином. Целью той странички было показать насколько возможно сделать файл маленьким.
Этот код демонстрирует это, он копилиться на насме и занимает 45 байт.

nasm -f bin -o prog prog.asm

Но вот тут встал вопрос а куда вставляется рабочий код, т.е. между какими строками. Пробовал ставить перед:

xor eax, eax
inc eax ; e_flags
int 0x80

но не получилось в ответ на это получил сообщение:

bash: ./prog: Cannot allocate memory

Пробовал в конец, но тот же пень.
Буду признателен за помощь в разгадке.


Заранее спасибо!!!

★★★★★

Ответ на: комментарий от cyclon

на www.linuxassembly.org в разделе документация есть две или три статьи, про самые маленькие бинарники. Там на чистом английском расписано - что к чему. Насколько я понимаю, код пишется в неиспользуемую часть elf-хидера. может ты там вылез за какие-нить пределы вставкой инструкций.

grustnoe ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.