为什么添加测试指令会导致GNU程序集中的分段错误?

时间:2014-01-12 20:28:13

标签: c assembly gnu

我无法追踪分段错误。在将我的c程序编译为汇编之后,我正在编辑它并添加一些东西。

我添加了一些代码,包括此部分:

.SB1:
         call fib
         jmp     .LBL2

那部分工作正常。但现在我想打电话给测试,也许会跳到另一个标签。现在,我只是在玩它,看看我是否可以学习如何运作(采取婴儿步骤)。所以我把代码更改为:

.SB1:
         call fib
         test    %esp, 0xfffffff
         jz      .SB2
         jmp     .LBL2
.SB2:
         jmp     .LBL2

但现在我遇到了分段错误。谁知道为什么?如果您需要更多信息或希望代码重现,请告诉我。

1 个答案:

答案 0 :(得分:5)

在AT& T语法中,文字需要以$为前缀。然后,还需要切换操作数:

test    $0xfffffff, %esp

如果没有$前缀,汇编程序会假定一个内存地址,并且访问地址0xfffffff很可能超出映射内存,这会导致分段错误。