2014-02-18 42 views
1

我試着運行這個shellcode的,但它拋出我: 「分段錯誤」 錯誤 shellcode的是以下幾點:的execve的shellcode的Linux分割故障

shellcode.asm:

global _start 
_start: 

jmp short ca 
doit: 
pop ebx 
xor eax, eax 
cdq 
mov byte [ebx+7], al 
mov long [ebx+8], ebx 
mov long [ebx+12], eax 
lea ecx, [ebx+8] 
mov byte al, 0x0b 

int 0x80 
ca: 
call doit 
db '/bin/sh' 

我編譯:'nasm -f elf shellcode.asm' 並鏈接它:'ld -m elf_i386 -s -o shellcode shellcode.o

我認爲錯誤是當我使用mov [ebx + x],al /因爲當我的時代eax/ebx 從代碼SE這Ÿ沒有錯誤

謝謝

回答

1

你的問題是.text部分是默認情況下不寫。最簡單的做法是將代碼放入標記爲可寫的新自定義部分。在你的彙編文件的頂部添加此行:

section .shellcode progbits alloc exec write align=16 

您也可以通過-N開關接頭。

或者,您可以重寫shellcode,以便它使用堆棧來創建參數。

+0

謝謝,它的工作原理。是的,如果我使用堆棧,它可以正常工作,但我想知道爲什麼我不能使用mov [],x指令。 – user3320748