首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调试代码

调试代码
EN

Stack Overflow用户
提问于 2015-02-09 05:57:24
回答 3查看 229关注 0票数 0

你好,伙计们,我正在开始调试代码的旅程,并按照本书运行以下命令,以便对下面的源代码进行一些分析

代码语言:javascript
复制
 // hello_world-1.c
   #include <stdio.h>

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

      return 0;

gcc -Wall -Wextra -c hello_world-1.c // What is wall and wextra here

代码语言:javascript
复制
  $ 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中没有全局变量。那么,为什么size报告数据和bss段对于对象文件的长度为零,对于可执行文件则为非零?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-09 06:29:21

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

票数 1
EN

Stack Overflow用户

发布于 2015-02-09 06:17:40

关于你的问题:

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

(注大写计数)

-Wall告诉编译器启用大多数警告

-Wextra告诉编译器启用更多警告

-c告诉编译器只编译,而不是链接。

因为没有包含'-o objfilename.o‘参数,所以编译器将输出一个与输入文件同名的对象文件,扩展名为“.o”。

建议始终显式地包含'-o objfilename.o‘参数。

建议在网上搜索这样的东西,这样你就可以找到类似于:

3.html

票数 1
EN

Stack Overflow用户

发布于 2015-02-09 06:29:29

这里是“大小”手册页的副本。

尺寸(1) GNU开发工具尺寸(1)

名称大小-列出部分大小和总大小。

概要尺寸-A_

GNU实用程序列出了每个对象或归档文件的节大小--和总大小--在其参数列表中列出了objfile。默认情况下,为存档中的每个对象文件或每个模块生成一行输出。

代码语言:javascript
复制
   objfile... are the object files to be examined.  If none are specified,
   the file "a.out" will be used.

命令行选项具有以下含义:

代码语言:javascript
复制
   -A
   -B
   --format=compatibility
       Using one of these options, you can choose whether the output from
       GNU size resembles output from System V size (using -A, or
       --format=sysv), or Berkeley size (using -B, or --format=berkeley).
       The default is the one-line format similar to Berkeley's.

       Here is an example of the Berkeley (default) format of output from
       size:

               $ size --format=Berkeley ranlib size
               text    data    bss     dec     hex     filename
               294880  81920   11592   388392  5ed28   ranlib
               294880  81920   11888   388688  5ee50   size

       This is the same data, but displayed closer to System V
       conventions:

               $ size --format=SysV ranlib size
               ranlib  :
               section         size         addr
               .text         294880         8192
               .data          81920       303104
               .bss           11592       385024
               Total         388392


               size  :
               section         size         addr
               .text         294880         8192
               .data          81920       303104
               .bss           11888       385024
               Total         388688

   --help
       Show a summary of acceptable arguments and options.

   -d
   -o
   -x
   --radix=number
       Using one of these options, you can control whether the size of
       each section is given in decimal (-d, or --radix=10); octal (-o, or
       --radix=8); or hexadecimal (-x, or --radix=16).  In --radix=number,
       only the three values (8, 10, 16) are supported.  The total size is
       always given in two radices; decimal and hexadecimal for -d or -x
       output, or octal and hexadecimal if you're using -o.

   --common
       Print total size of common symbols in each file.  When using
       Berkeley format these are included in the bss size.

   -t
   --totals
       Show totals of all objects listed (Berkeley format listing mode
       only).

   --target=bfdname
       Specify that the object-code format for objfile is bfdname.  This
       option may not be necessary; size can automatically recognize many
       formats.

   -V
   --version
       Display the version number of size.

   @file
       Read command-line options from file.  The options read are inserted
       in place of the original @file option.  If file does not exist, or
       cannot be read, then the option will be treated literally, and not
       removed.

       Options in file are separated by whitespace.  A whitespace
       character may be included in an option by surrounding the entire
       option in either single or double quotes.  Any character (including
       a backslash) may be included by prefixing the character to be
       included with a backslash.  The file may itself contain additional
       @file options; any such options will be processed recursively.

还请参见ar(1)、objdump(1)、read亲自(1)和binutils的Info条目。

版权(c) 1991-2013年自由软件基金会。

代码语言:javascript
复制
   Permission is granted to copy, distribute and/or modify this document
   under the terms of the GNU Free Documentation License, Version 1.3 or
   any later version published by the Free Software Foundation; with no
   Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
   Texts.  A copy of the license is included in the section entitled "GNU
   Free Documentation License".

望远镜-2.23.91 2013-11-18大小(1)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28403635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档