进入main之前有四个执行步骤? [复制]

问题描述 投票:2回答:1

此问题已经在这里有了答案:

带上我下面的5行文件:

#include <stdio.h>
int main() {
    printf("Hello");
    return 0;
}

它对应于以下程序集:

`main:
    0x100000f60 <+0>:  pushq  %rbp
    0x100000f61 <+1>:  movq   %rsp, %rbp
    0x100000f64 <+4>:  subq   $0x10, %rsp
    0x100000f68 <+8>:  movl   $0x0, -0x4(%rbp)
->  0x100000f6f <+15>: leaq   0x34(%rip), %rdi          ; "Hello"

我们可以注意到main的第一行显示“ Hello”对应于第五条指令。前面的四个指示是什么:它们做什么?

c assembly x86-64 att
1个回答
2
投票
0x100000f60 <+0>:  pushq  %rbp

推入呼叫者的基本指针。

0x100000f61 <+1>:  movq   %rsp, %rbp

将堆栈指针复制到基本指针(设置此函数的堆栈框架)

0x100000f64 <+4>:  subq   $0x10, %rsp

保留堆栈空间(大概是返回值-您可能没有启用任何优化的情况下编译了该程序)

0x100000f68 <+8>:  movl   $0x0, -0x4(%rbp)

将返回值(零)放入堆栈。

->  0x100000f6f <+15>: leaq   0x34(%rip), %rdi          ; "Hello"

将指向“ Hello”字符串文字的指针加载到rdi寄存器中。

© www.soinside.com 2019 - 2024. All rights reserved.