问题描述
如果我在调用 printf
之前将某些东西压入堆栈,下面的程序会出现段错误。我不明白为什么会发生这种情况,因为我的假设是 system v abi / x86_64 参数是通过寄存器传递的(至少是前 6 个),那么为什么 printf 会查看堆栈(更是如此,超出它的基指针)?还是我误会了什么?
这是段错误的程序:
.data
.LC0:
.string ""
.text
.global main
main:
PUSHQ %rbp
MOVQ %rsp,%rbp
PUSHQ $1
MOVQ $.LC0,%rdi
MOVQ $0,%rax
CALL printf
RET
我编译并运行它:
gcc -no-pie hello.s -o hello && ./hello
当我在 POPQ %rbx
之后添加 PUSHQ
时,它不会出现段错误。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)