有人可以向我解释为什么这是segfaulting?如果我删除mov [eax],ebx
它不会发生段错误。但我需要将新值保存到[ebp+8]
。我究竟做错了什么?如何将新的减去值保存到该地址?
enter 0,0
mov eax,[ebp+8]
call print_nl
call print_int
cmp edx,99
je DontUpdate
jne Update
DontUpdate:
leave
ret
Update:
cmp edi, 5
jz NoScore
jnz Score
NoScore:
mov ebx,eax
sub ebx,1
mov eax,[ebp+8]
mov [eax],ebx
; mov [score],eax
mov eax,printScore
call print_string
mov eax,ebx
call print_int
mov edi,0
pusha
popa
leave
ret
答案 0 :(得分:0)
您正在从调用方传递无效指针(NULL或已损坏)。
mov eax,[ebp+8]
<强>更新强>
从您的评论中我假设您传递的是值而不是指针。除非您在调用函数和变量声明的位置发布代码,否则无法从您提供的信息中确定。