有人能告诉我为什么这是Segfracting吗?(x86 NASM组件)



有人能向我解释为什么这是分段断层吗?如果我移除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]

更新

根据您的评论,我认为您传递的是值而不是指针。除非您发布了调用函数的代码和变量的声明,否则没有人可以从您提供的信息中确定。

最新更新