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