gpt4 book ai didi

c - 您如何解释这个反汇编列表?

转载 作者:行者123 更新时间:2023-12-02 19:43:20 25 4
gpt4 key购买 nike

我有一个简单的 C 语言函数,位于单独的文件 string.c 中:

void var_init(){
char *hello = "Hello";
}

编译:

gcc -ffreestanding -c string.c -o string.o

然后我使用命令

objdump -d string.o

查看反汇编列表。我得到的是:

string.o:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <var_init>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 48 8d 05 00 00 00 00 lea 0x0(%rip),%rax # b <var_init+0xb>
b: 48 89 45 f8 mov %rax,-0x8(%rbp)
f: 90 nop
10: 5d pop %rbp
11: c3 retq

我无法理解这个列表。 《从头开始编写操作系统》一书讲述了一些关于旧的反汇编的内容,并稍微揭开了其中的神秘面纱,但它们的 list 完全不同,我什至没有看到像作者所说的那样将数据解释为我的代码。

最佳答案

除了 @VladfromMoscow 的解释之外,我认为这可能对发布者了解编译为程序集时发生的情况而不是使用 objdump 来查看会有所帮助,因为这样可以更清楚地看到数据(IMO) RIP 相对寻址可能更有意义。

gcc -S x.s

产量

    .file   "x.c"
.text
.section .rodata
.LC0:
.string "Hello"
.text
.globl var_init
.type var_init, @function
var_init:
.LFB0:
pushq %rbp
movq %rsp, %rbp
leaq .LC0(%rip), %rax
movq %rax, -8(%rbp)
nop
popq %rbp
ret
.LFE0:
.size var_init, .-var_init
.ident "GCC: (Alpine 8.3.0) 8.3.0"
.section .note.GNU-stack,"",@progbits

关于c - 您如何解释这个反汇编列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59781879/

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