アセンブリを学習しようとしていますが、スタックからデータをプッシュ/ポップしようとすると、セグメンテーション違反が発生し続けることがわかりました。私はいくつかのガイドを読んで、スタックがどのように機能し、スタックを操作するかを知っています。しかし、なぜエラーが発生し続けるのかわかりません。
誰か助けてくれませんか?
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