gpt4 book ai didi

x86 - 从寄存器移动到有效地址

转载 作者:行者123 更新时间:2023-12-04 21:33:47 25 4
gpt4 key购买 nike

我试图将值从 albl 移动到有效内存中,但我不断遇到段错误。我的程序所做的是获取位于 [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

最佳答案

代码没有任何错误。但是因为它在写入 esi 时失败但在读取 esi 时成功,这一定意味着目标地址有效,但写保护。

很可能 esi 的值源自 .text 段,它是只读的。

不太可能的可能性是代码段是可写的,并且 esi 指向下一条指令,然后将其修改为包含无效指令。

关于x86 - 从寄存器移动到有效地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16273384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com