【发布时间】:2014-07-30 08:47:33
【问题描述】:
我正在使用 elf64 来编译我的程序集 x86 代码: 我有这个子程序:
printNumber:
mov EAX, EDX ; EDX contain some value like "35"
mov ESI, 10 ; to divide by 10
MOV ECX,0 ; counter
whileDiv:
cmp EAX, 0
je endWhileDiv
xor rdx, rdx ; clean RDX
idiv ESI ; EAX=EAX/10 and EDX = EAX%10
push rdx ; this line generate a segmentation fault
add ECX, 1; count how many items i has added into stack
jmp whileDiv
endWhileDiv:
ret
我正在尝试使用 push 将数字的所有数字推送到我的堆栈中,但我遇到了分段错误。 当我评论这一行时:
push rdx ; this line generate a segmentation fault
我不会再犯“Segmentation Fault”
我使用“push rdx”而不是“push EDX”,因为我在 NASM 使用 64 位模式 当我尝试使用:“push EDX”时,出现此错误:“64 位模式不支持指令”
请有人帮忙告诉我为什么会发生这种情况以及如何解决?
PS:对不起我的英语不好
【问题讨论】:
-
在64位模式下返回地址不是也位于栈顶吗?如果是这样,在你的那个循环之后,它就不会了。
标签: assembly x86 segmentation-fault stack