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