|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一般上来说,用普通的汇编编译显示"Hello!"字样的ELF64程序也要最少152字节(通常是216字节,视乎你怎么写代码),但是用以下方式,连文件头也个别定制,就能有机会生成小于152或更低的可执行文件大小。
我的这个是129字节!有人做到108字节,不过无法在我的Debian 11上正确运行。
- ORG 0x400000
-
- USE64
- db 0x7F, "ELF" ; EI_MAG0, EI_MAG1, EI_MAG2, EI_MAG3
- db 0x02 ; EI_CLASS (2=ELFCLASS64)
- db 0x01 ; EI_DATA (1-ELFDATA2LSB)
- db 0x01 ; EI_VERSION
- db 0x03 ; EI_OSABI
- db 0x00
- @@ db "Hello!",0x0A
- msg_size = $ - @b
- dw 2 ; ET_EXEC e_type
- dw 0x3E ; e_machine
- dd 1 ; e_version
- dq _start - $$ + 0x400000 ; e_entry
- dq phdr - $$ ; e_phoff
- dq 0x00 ; e_shoff
- dd 0x00 ; e_flags
- dw phdr - $$ ; e_ehsize
- dw _start - phdr ; e_phentsize
- dw 0x01 ; e_phnum
- ;dw 0x40 ; e_shentsize
- ;dw 0x00 ; e_shnum
- ;dw 0x00 ; e_shstmdx
- phdr:
- dd 0x01 ; PT_LOAD p_type
- dd 0x05 ; PF_X + PF_W + PF_R p_flags
- dq 0x00 ; p_offset
- dq 0x400000 ; 0x400000 p_vaddr
- dq 0x400000 ; 0x400000 p_paddr
- dq _end-_start ; p_filesz
- dq _end-_start ; p_memsz
- dq 0x100 ; p_align
-
- _start:
- ;lea esi, [@b]
- mov esi, 0x400009
- mov dl, msg_size
- mov al, 1 ; sys_write
- ;mov dil, 1 ; STDOUT = 1
- syscall
- mov al, 60 ; sys_exit
- syscall
- _end:
复制代码
|
|