Flo*_*ian 0 stack push nasm fault
我正在尝试运行nasm程序。如下代码:
segment .data
contAir: dt 1.11330e-10
constOil: dt 2.33656e-10
segment .text
global calc
calc:
mov edx, 0
push ebp
;mov ebp, esp
;mov eax, [ebp + 8]
ret
Run Code Online (Sandbox Code Playgroud)
将ebp推入堆栈时出现分段错误(核心转储)。这是为什么?我在Ubuntu虚拟机上运行此代码。有趣的是,有时我会收到“非法指令”错误。
将ebp推入堆栈时出现分段错误(核心转储)。这是为什么?我在Ubuntu虚拟机上运行此代码。有趣的是,有时我会收到“非法指令”错误。
我敢打赌,您不会在时遇到细分错误push,而在时遇到错误ret。该ret指令的作用是从堆栈中弹出返回地址(通常将被一条call指令压入该地址)并跳转到该地址。
因此,当您执行此操作时:
push ebp
ret
Run Code Online (Sandbox Code Playgroud)
您实际上是在跳到碰巧要存储在中的任何地址ebp。
您需要在返回之前平衡堆栈-即每个push-type指令应具有一个对应的pop-type指令:
push ebp
; ... other code goes here ...
pop ebp
ret
Run Code Online (Sandbox Code Playgroud)