129字节的"Hello!"ELF64程序
一般上来说,用普通的汇编编译显示"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:
作为一个普通的PHP程序猿,表示看不太懂,不明觉厉啊。 simonzhd 发表于 2021-10-17 15:17
作为一个普通的PHP程序猿,表示看不太懂,不明觉厉啊。
不好意思啊,我的兴趣主要在这些领域,因此虽然也会跟着谈论时下流行编程工具,但是我其实不精通Go, Rust, Docker, NoSql,甚至是PHP..... 我想大家只能选其中一个领域专攻和深究。
孤星1119 发表于 2021-10-17 15:21
不好意思啊,我的兴趣主要在这些领域,因此虽然也会跟着谈论时下流行编程工具,但是我其实不精通Go, Rus ...
是的,术业有专攻嘛。不过大家谈谈自己的领域也蛮好啊,可以让大家涨涨见识、开开眼界。 在GitHub同时也找到一位华人的小ELF64程序,它的功用能计算自身MD5.
不过他不是用汇编,而是反编译并用了各种工具才能达到474字节。
据悉这是他们公司内部的比赛。
https://github.com/esrrhs/selfmd5
页:
[1]