Intel彙編 ld連結錯誤

冰雪封存的記憶發表於2022-01-09

最近在ubuntu20.04系統上編譯一段簡單的shellcode彙編程式碼時遇到了標題中的錯誤,輸入命令如下:

nasm -f elf -o shellcode.o shellcode.asm
ld -o shellcode shellcode.o

出現錯誤如下:

ld: i386 architecture of input file `shellcode.o' is incompatible with i386:x86-64 output

原因是我使用的ubuntu20.04是64位系統,而我的code是32位應用程式。在x86_64上編譯/連結32位應用程式時,需要設定模擬elf_i386來提供正確的elf格式。
解決方案:

ld -m elf_i386 -s -o shellcode shellcode.o

執行的shellcode.asm程式碼如下:

section .txt
global _start
_start:
    xor eax, eax
    push eax    ;"\x00"
    push 0x68732f2f    ;"//sh"
    push 0x6e69622f    ; /"bin"
    mov ebx, esp
    push eax    ; "\x00" to stack
    push ebx    ; store "/bin//sh" to stack
    mov ecx, esp    ; ecx = esp
    xor edx, edx    ; edx = 0
    mov al, 0xb    ; al = 11 the call number of execve
    int 0x80
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章