首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Aleph上工作时,64位系统上没有堆栈分配

在Aleph上工作时,64位系统上没有堆栈分配
EN

Stack Overflow用户
提问于 2016-10-09 16:51:46
回答 1查看 54关注 0票数 1

我已经搞砸了Aleph One的"Smash the stack for Fun and Profit“,我发现,在为我的64位处理器编译代码时,堆栈内存没有使用通常的"sub $VALUE,%REG”进行分配。

以下是函数源代码:

代码语言:javascript
复制
void function() {
  char buffer1[5];
  char buffer2[10];
  int *ret;

  ret = buffer1 + 32;
  (*ret) +=8;   
}

这是编译后的版本

代码语言:javascript
复制
function:
.LFB0:
.cfi_startproc
pushq   %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq    %rsp, %rbp
.cfi_def_cfa_register 6
movl    $1868654947, -16(%rbp)
movb    $0, -12(%rbp)
leaq    -16(%rbp), %rax
addq    $32, %rax
movq    %rax, -8(%rbp)
movq    -8(%rbp), %rax
movl    (%rax), %eax
leal    8(%rax), %edx
movq    -8(%rbp), %rax
movl    %edx, (%rax)
nop
popq    %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc

为什么没有标准的堆栈分配,而如果我使用-m32选项和gcc,它会出现?

EN

回答 1

Stack Overflow用户

发布于 2016-10-09 17:46:46

amd64 SysV ABI包含一个称为的概念。红色区域是堆栈指针下面128个字节的区域。它的目的是允许函数在必须递减堆栈指针的情况下分配少量堆栈。这就是为什么你看不到堆栈指针递减的原因。

使用-mno-red-zone编译以关闭此功能。

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

https://stackoverflow.com/questions/39941724

复制
相关文章

相似问题

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