gpt4 book ai didi

c - 在 Aleph One 文章上工作时在 64 位系统上缺少堆栈分配

转载 作者:太空宇宙 更新时间:2023-11-04 03:27:40 25 4
gpt4 key购买 nike

我一直在搞乱 Aleph One 的“Smash the Stack for Fun and Profit”,发现在为我的 64 位处理器编译代码时,堆栈内存没有使用通常的“sub $”分配值,%REG。”

这是函数源码:

void function() {
char buffer1[5];
char buffer2[10];
int *ret;

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

这是编译后的版本

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 一起使用,它会出现?

最佳答案

amd64 SysV ABI 包含一个名为 red zone 的概念.红色区域是堆栈指针正下方的 128 字节区域。它的目的是允许函数分配少量堆栈,而不必减少堆栈指针。这就是为什么您看不到堆栈指针递减的原因。

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

关于c - 在 Aleph One 文章上工作时在 64 位系统上缺少堆栈分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39941724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com