3
我試圖將al
和bl
的值移入有效內存,但我不斷收到分段錯誤。我的程序所做的是取值爲[esi]
和[esi+1]
,然後它將這些字節旋轉並放回。但是,當他們回[esi]
和[esi+1]
需要交換(所以bl
到[esi]
和al
到[esi+1]
),這是我得到一個分段錯誤。從寄存器移動到有效地址
mov al, [esi]
mov bl, [esi+1]
rol bl,4
ror al,2
mov [esi],bl
mov [esi+1],al
誰能澄清爲什麼這些分段故障正在發生?
我當前的完整代碼:
global _start
section .text
_start:
jmp short call_shellcode
decoder:
pop esi
xor ecx, ecx
xor eax,eax
xor ebx,ebx
mov cl, 25
decode:
lea edi, [esi]
mov al, byte [edi]
mov bl, byte [esi+1]
ror al,2
rol bl,4
mov byte [esi], al
mov byte [esi+1],bl
add esi,2
loop decode
jmp short EncodedShellcode
call_shellcode:
call decoder
EncodedShellcode: db 0x13,0x3,0x5,0xa1,0xf2,0xbc,0x37,0xa1,0x86,0xbc,0x26,0xa5,0xe6,0x26,0x3e,0x41,0x98,0x8b,0x35,0x26,0x1e,0xc2,0xb0,0x37,0x8
我會發布我現在有的完整代碼,它實際上是一段使用跳轉,調用,流行技術的shellcode – 2013-04-29 08:10:11
我認爲你可能是對的,.text段不可寫 – 2013-04-29 08:13:23
您可以通過省略'jmp short EncodedShellcode'並將Shellcode放置到'.data'來驗證。然後爲了克服這個問題,文本段必須重新編程爲可寫(通過一些系統調用)在這裏查看詳細信息:http://stackoverflow.com/questions/4169417/self-modifying-code – 2013-04-29 08:27:08