首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个程序集分段出现故障?

为什么这个程序集分段出现故障?
EN

Stack Overflow用户
提问于 2014-11-28 20:48:26
回答 1查看 109关注 0票数 0

我有两组x64程序集,一组是分段故障,另一组是运行良好的程序集。

这个程序运行时没有问题,返回0:

代码语言:javascript
复制
.global main
main:
SUBQ    $56, %rsp
PUSH    %rax
MOVQ    $0, %rax
MOVQ    $3, %r10
CMPL    %eax, %r10d
POP %rax
JGE .L3
MOVQ    $11, %rdi
CALL    raise
MOVQ    %rax, 40(%rsp)
.L3:
MOVL    $3, 32(%rsp)
ADDL    $1, 32(%rsp)
MOVQ    32(%rsp), %rdi
MOVQ    $8, %rsi
CALL    calloc
MOVQ    %rax, 40(%rsp)
MOVQ    40(%rsp), %r10
MOVL    $3, (%r10)
MOVQ    40(%rsp), %r10
MOVQ    %r10, 24(%rsp)
MOVQ    $0, %rax
ADDQ    $56, %rsp
RET

然而,这一段故障(信号11):

代码语言:javascript
复制
.global main
main:
SUBQ    $72, %rsp
PUSH    %rax
MOVQ    $0, %rax
MOVQ    $3, %r10
CMPL    %eax, %r10d
POP %rax
JGE .L3
MOVQ    $11, %rdi
CALL    raise
MOVQ    %rax, 40(%rsp)
.L3:
MOVL    $3, 32(%rsp)
ADDL    $1, 32(%rsp)
MOVQ    32(%rsp), %rdi
MOVQ    $8, %rsi
CALL    calloc
MOVQ    %rax, 40(%rsp)
MOVQ    40(%rsp), %r10
MOVL    $3, (%r10)
MOVQ    40(%rsp), %r10
MOVQ    %r10, 24(%rsp)
MOVL    $200, 48(%rsp)
MOVQ    $0, %rax
ADDQ    $72, %rsp
RET

正如您所看到的,唯一的区别是行MOVL $200,48(%rsp)和从堆栈指针开始和结束时的加/减。我不得不假设它在48(%rsp)上有段错误,但我不明白为什么会这样。有人能解释一下为什么会发生这种事吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-28 23:17:30

原来calloc的参数是错误的,因为32位和64位指令的组合,所以它试图分配太多的空间,从而返回0。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27195700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档