有人能向我解释为什么这是分段断层吗?如果我移除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
您正在从调用方传递无效指针(NULL或已损坏)。
mov eax,[ebp+8]
更新
根据您的评论,我认为您传递的是值而不是指针。除非您发布了调用函数的代码和变量的声明,否则没有人可以从您提供的信息中确定。