gpt4 book ai didi

c - 调试代码

转载 作者:太空宇宙 更新时间:2023-11-04 08:30:56 25 4
gpt4 key购买 nike

大家好,我开始了调试代码的旅程,按照书上的命令运行了以下命令,只是为了对下面的源代码进行一些分析

 // hello_world-1.c
#include <stdio.h>

int main(void)
{
printf("hello world\n");

return 0;

gcc -Wall -Wextra -c hello_world-1.c//这里的 wall 和 wextra 是什么 ?

  $ size hello_world-1 hello_world-1.o 
text data bss dec hex filename
916 256 4 1176 498 hello_world-1
48 0 0 48 30 hello_world-1.o

$ objdump -h hello_world-1.o

hello_world-1.o: file format elf32-i386

Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000023 00000000 00000000 00000034 2**2
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
1 .data 00000000 00000000 00000000 00000058 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 00000000 00000000 00000058 2**2
ALLOC
3 .rodata 0000000d 00000000 00000000 00000058 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .note.GNU-stack 00000000 00000000 00000000 00000065 2**0
CONTENTS, READONLY
5 .comment 0000001b 00000000 00000000 00000065 2**0
CONTENTS, READONLY
48 0 0 48 30 hello_world-1.o

我有一些问题

1) hello_world-1.c 中没有全局变量。那么为什么大小报告目标文件的数据和 bss 段长度为零,而可执行文件的长度为非零?

2) 为什么 size 和 objdump 报告文本段的大小不同?

最佳答案

目标文件由 .text(即二进制 CPU 指令)、.rodata(只读数据 - "hello world"\10\0 - 总共 13 个字节)和 .comment(附加链接信息)组成。可执行文件由相同的减去 .comment 加上标准库内容加上导入动态库数据(如果有的话)组成。标准库至少添加了启动代码,这使得可执行文件更大。所以你的区别是:可执行的 .text = .object 文本 + 启动代码 + stdlibrary 代码(如果是静态链接)

关于c - 调试代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28403635/

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