我无法追踪分段错误。在将我的c程序编译为汇编之后,我正在编辑它并添加一些东西。
我添加了一些代码,包括此部分:
.SB1:
call fib
jmp .LBL2
那部分工作正常。但现在我想打电话给测试,也许会跳到另一个标签。现在,我只是在玩它,看看我是否可以学习如何运作(采取婴儿步骤)。所以我把代码更改为:
.SB1:
call fib
test %esp, 0xfffffff
jz .SB2
jmp .LBL2
.SB2:
jmp .LBL2
但现在我遇到了分段错误。谁知道为什么?如果您需要更多信息或希望代码重现,请告诉我。
答案 0 :(得分:5)
在AT& T语法中,文字需要以$
为前缀。然后,还需要切换操作数:
test $0xfffffff, %esp
如果没有$
前缀,汇编程序会假定一个内存地址,并且访问地址0xfffffff
很可能超出映射内存,这会导致分段错误。