我正在尝试学习汇编,并发现在尝试从堆栈中推送/弹出数据时,我不断收到段错误。我已经阅读了一些指南并且知道堆栈是如何工作的以及如何使用堆栈;但不知道为什么我不断收到错误。
有人可以帮忙吗?
segment .data
myvar: db "hello world", 0xA0, 0
myvarL: equ $-myvar
segment .text
global _start
_start:
push ebp
mov ebp, esp
push myvarL
push myvar
call _hworld
mov eax, 1
mov ebx, 0
int 0x80
_hworld:
mov eax, 4
mov ebx, 1
mov ecx, [ebp+4]
mov edx, [ebp+8]
pop ebp
int 0x80
ret
我假设 +4 是 32 位,然后 +8 是 64 位。我不太清楚为什么在我读过的一些指南上会这样做。我会假设这myvar
是13个字节?
这是错误:
$ ./pushpop
Segmentation fault