【发布时间】:2019-01-12 03:02:16
【问题描述】:
将值分配给地址时,我首先在两个地方遇到分段错误
mov [ebx] , eax
当我尝试在将值移动到堆栈指针后将寄存器压入堆栈时
lea esp, [ebx+eax*2]
push eax
为什么会这样?
完整代码:
push ebp
mov ebp, esp
mov eax, 0x7FFFF
mov ebx, 0x100000
mov [ebx] , eax
mov ecx, eax
inc eax
lea esp, [ebx+eax*2]
push eax
push ecx
xor ecx, [esp +4]
shl ecx, 12
add ecx, 0x1000
dec ecx
xchg ecx, [esp]
xor eax, eax
mov esp, ebp
pop ebp
ret
【问题讨论】:
-
也许您没有操作系统的权限来写入您已将堆栈指向的内存页面?你为什么改变ESP?我假设这是在 Linux 或其他操作系统下?
-
我想通过在汇编中分配值来进行小型培训,以了解堆栈如何更改它的值和值寄存器存储
-
@MichaelPetch 我在 Windows 上使用 SASM IDE
-
您不能将堆栈指针更改为任意值,然后对堆栈进行读/写操作,除非您以某种方式分配了具有读/写权限的相关内存。
-
如果你想看看栈是如何工作的,那么 push 和 pop 值,看看 esp 是如何变化的。您不能只是将堆栈指针设置为任意值。
标签: assembly x86 segmentation-fault stack low-level