【发布时间】:2015-10-31 11:36:37
【问题描述】:
这段代码导致分段错误,我不知道为什么会这样, 该代码只是应该将堆栈中 esp 的当前位置传递给 ebp 并且只需在 ebp 上使用间接寻址模式来获取地址的值, 我不知道为什么操作系统会终止导致分段错误
.section .data
.section .text
.globl _start
_start:
movl $50,%edx
pushl, %edx
movl %esp,%ebp
movl (%ebp),%ebx ## this causes the problem for some reason,
movl $1,%eax
int $0x80 ## Program should return an exit status of %ebx value
【问题讨论】:
-
如果你有C代码,请贴出来。
-
R sahu,嘿,stackoverflow,建议我也应该在 c 部分发布我的帖子,例如,我没有 C 代码。
-
为我工作。唯一可能发生的问题是您没有正确清理堆栈(有一个
push没有匹配的pop),但由于您在此过程中所做的只是发出一个系统调用,这应该没关系。 -
您在
pushl,%edx中有一个额外的逗号,但我希望这只是复制粘贴错误。此外,我们希望您在 linux 上以 32 位模式运行它。你忘了提供这些重要的细节,以及你用来构建它的命令行。 -
看,这就是问题所在。您设法将其编译为 64 位代码。不知道如何,因为
pushl %edx甚至没有组装。无论如何,使用as --32 test.s -o test.o; ld -melf_i386 test.o -o test正确创建一个32位版本。