孤星1119 发表于 2021-10-17 15:11:13

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:   




simonzhd 发表于 2021-10-17 15:17:46

作为一个普通的PHP程序猿,表示看不太懂,不明觉厉啊。

孤星1119 发表于 2021-10-17 15:21:54

simonzhd 发表于 2021-10-17 15:17
作为一个普通的PHP程序猿,表示看不太懂,不明觉厉啊。

不好意思啊,我的兴趣主要在这些领域,因此虽然也会跟着谈论时下流行编程工具,但是我其实不精通Go, Rust, Docker, NoSql,甚至是PHP..... 我想大家只能选其中一个领域专攻和深究。

simonzhd 发表于 2021-10-17 15:25:42

孤星1119 发表于 2021-10-17 15:21
不好意思啊,我的兴趣主要在这些领域,因此虽然也会跟着谈论时下流行编程工具,但是我其实不精通Go, Rus ...

是的,术业有专攻嘛。不过大家谈谈自己的领域也蛮好啊,可以让大家涨涨见识、开开眼界。

孤星1119 发表于 2021-10-19 17:53:38

在GitHub同时也找到一位华人的小ELF64程序,它的功用能计算自身MD5.
不过他不是用汇编,而是反编译并用了各种工具才能达到474字节。
据悉这是他们公司内部的比赛。


https://github.com/esrrhs/selfmd5




页: [1]
查看完整版本: 129字节的"Hello!"ELF64程序