【发布时间】:2013-04-16 22:49:33
【问题描述】:
我正在尝试运行一个 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
将 ebp 推入堆栈时出现分段错误(核心转储)。这是为什么? 我在 Ubuntu 虚拟机上运行此代码。 有趣的是,有时我会收到“非法指令”错误。
【问题讨论】:
-
你也在本机编译吗?
-
是的。它是一个使用一些汇编代码的 C 程序。但就我的输出显示而言,C 代码运行良好。
-
您能否将所有来源添加到您的问题中?
-
从技术上讲,
ret不是退出程序并返回操作系统的正确方法。你需要使用exit或int 80,但是你说的是C程序,你是在调用这个吗?如果是这样,你需要在ret之前pop ebp
标签: assembly x86 stack nasm fault