gpt4 book ai didi

gcc - 在 32 位机器上编译的汇编代码与使用 "gcc -m32"编译的代码不同吗?

转载 作者:行者123 更新时间:2023-12-02 03:43:27 26 4
gpt4 key购买 nike

我现在正在学习汇编语言。我正在学习的书中的代码示例都是在x86 32位机器(我认为)上用gcc编译的。为了将我的输出与书中的输出相匹配,我使用“gcc -m32”编译了简单的 helloworld.c。

#include <stdio.h>

int main(){
int i;
for(i=0;i<10;i++){
printf("Hello World!\n");
}
return 0;
}

运行“objdump -D a32.out | grep -A20 main.:”得到的输出如下所示:

0000051d <main>:
51d: 8d 4c 24 04 lea 0x4(%esp),%ecx
521: 83 e4 f0 and $0xfffffff0,%esp
524: ff 71 fc pushl -0x4(%ecx)
527: 55 push %ebp
528: 89 e5 mov %esp,%ebp
52a: 53 push %ebx
52b: 51 push %ecx
52c: 83 ec 10 sub $0x10,%esp
52f: e8 ec fe ff ff call 420 <__x86.get_pc_thunk.bx>
534: 81 c3 cc 1a 00 00 add $0x1acc,%ebx
53a: c7 45 f4 00 00 00 00 movl $0x0,-0xc(%ebp)
541: eb 16 jmp 559 <main+0x3c>
543: 83 ec 0c sub $0xc,%esp
546: 8d 83 f0 e5 ff ff lea -0x1a10(%ebx),%eax
54c: 50 push %eax
54d: e8 5e fe ff ff call 3b0 <puts@plt>
552: 83 c4 10 add $0x10,%esp
555: 83 45 f4 01 addl $0x1,-0xc(%ebp)
559: 83 7d f4 09 cmpl $0x9,-0xc(%ebp)
55d: 7e e4 jle 543 <main+0x26>

但在书中它看起来像这样:enter image description here

它错过了我得到的输出中的前三行,并且除了接下来的两行之外,看起来没有任何相似之处。这是为什么 ?我如何更改编译器/反汇编设置以使其看起来相似?

最佳答案

默认情况下,您的编译器配置为生成位置无关的二进制文件,这会导致与本书的显着差异。 (这是 GCC 最近的发展)。

如果禁用此功能,您将更接近这本书:

gcc -fno-pie -no-pie -m32 hello.c

正如其他人所说,除非您获得以完全相同的配置构建的完全相同的编译器,否则不能保证您将获得与书中内容相同的代码。

关于gcc - 在 32 位机器上编译的汇编代码与使用 "gcc -m32"编译的代码不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47661934/

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