小编ASL*_*LOP的帖子

为什么 C 编译器在 RET 指令后生成 NOP?

在 OSX 64 位上,编译一个像这样的虚拟 C 程序:

#include <stdio.h>

void foo1() {
}

void foo2() {
}

int main() {
        printf("Helloooo!\n");
        foo1();
        foo2();
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

生成以下 ASM 代码(使用 otool 反汇编二进制文件):

(__TEXT,__text) section
_foo1:
0000000100000f10    55                  pushq   %rbp
0000000100000f11    4889e5              movq    %rsp, %rbp
0000000100000f14    897dfc              movl    %edi, -0x4(%rbp)
0000000100000f17    5d                  popq    %rbp
0000000100000f18    c3                  retq
0000000100000f19    0f1f8000000000      nopl    (%rax)
_foo2:
0000000100000f20    55                  pushq   %rbp
0000000100000f21    4889e5              movq    %rsp, %rbp
0000000100000f24    5d                  popq    %rbp
0000000100000f25    c3                  retq
0000000100000f26    662e0f1f840000000000    nopw    %cs:(%rax,%rax)
_main: …
Run Code Online (Sandbox Code Playgroud)

c macos assembly

2
推荐指数
1
解决办法
961
查看次数

标签 统计

assembly ×1

c ×1

macos ×1