Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
BITS 32;
ORG 00400000h;
DB 7Fh, "ELF";
DD 01h;
DD 00h;
DD $$;
DW 02h;
DW 03h;
DD @main;
DD @main;
DD 04h;
@main:
MOV ECX, @text;
JMP SHORT @code;
NOP;
DW 34h;
DW 20h;
DD 01h;
@code:
LEA EDX, [EBX+11];
LEA EAX, [EBX+4];
INC EBX;
INT 80h;
MOV EAX, EBX;
INT 80h;
@text:
DB "ELF, hello!";
yasm -f bin имяфайла.asm
chmod u+x имяфайла
BITS 32;
ORG 05430000h;
DB 0x7F, "ELF";
DD 01h, 00h, $$;
DW 02h, 03h;
DD @main;
DW @main - $$;
@main:
INC EBX;
DB 05h; <-- ADD EAX,
DD 04h; <-- LONG(04h)
MOV ECX, @text;
MOV DL, 11;
INT 80h;
AND EAX, 00010020h;
XCHG EAX, EBX;
INT 80h;
@text:
DB "ELF, hello!";int main() {
return write(1,"Hello, world!\n",14);
}void _start(){
int a=3;
int b=5;
exit1();
}void exit1(){
asm("movl $1,%eax;"
"xorl %ebx,%ebx;"
"int $0x80");
}
void exit2(){
asm("movl $1,%eax;"
"xorl %ebx,%ebx;"
"int $0x80");
}a.out: file format elf32-i386
Disassembly of section .text:
080480b8 <_start>:
80480b8: 55 push %ebp
80480b9: 89 e5 mov %esp,%ebp
80480bb: 83 ec 18 sub $0x18,%esp
80480be: c7 45 f0 03 00 00 00 movl $0x3,-0x10(%ebp)
80480c5: c7 45 f4 05 00 00 00 movl $0x5,-0xc(%ebp)
80480cc: e8 03 00 00 00 call 80480d4 <exit1>
80480d1: c9 leave
80480d2: c3 ret
80480d3: 90 nop
080480d4 <exit1>:
80480d4: 55 push %ebp
80480d5: 89 e5 mov %esp,%ebp
80480d7: b8 01 00 00 00 mov $0x1,%eax
80480dc: 31 db xor %ebx,%ebx
80480de: cd 80 int $0x80
80480e0: 5d pop %ebp
80480e1: c3 ret
080480e2 <exit2>:
80480e2: 55 push %ebp
80480e3: 89 e5 mov %esp,%ebp
80480e5: b8 01 00 00 00 mov $0x1,%eax
80480ea: 31 db xor %ebx,%ebx
80480ec: cd 80 int $0x80
80480ee: 5d pop %ebp
80480ef: c3 ret
115 байт! В ~100 000 раз меньше чем первоначальный вариант
Минималистичная программа в формате ELF