《深入分析GCC 》——2.3 GNU binutils工具-阿里云开发者社区

开发者社区> 华章计算机> 正文

《深入分析GCC 》——2.3 GNU binutils工具

简介:
+关注继续查看

本节书摘来自华章出版社《深入分析GCC 》一书中的第2章,第2.3节,作者 王亚刚 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.3 GNU binutils工具image

在分析GCC代码时,尤其是后端代码生成的过程中,经常需要对编译生成的目标文件进行分析,包括编译生成的汇编代码、目标文件等,此时,如果能够熟练使用GNU binutils工具链中的工具,无疑将对分析非常有用。GNU binutils工具的源代码及介绍参见GNU的官网:http://www.gnu.org/software/binutils/,其中主要工具如表2-1所示。


72c643974a286774c1989b047971657bb9bd2c8d

例如,对于如下的源代码:

[GCC@localhost test]$ cat test.c
int main(){
  int i=0, sum=0;
  sum = sum + i;
  return sum;
}

可以使用objdump进行目标代码的反汇编:

[GCC@localhost test]$ gcc -c -o test.o  test.c
[GCC@localhost test]$ objdump -d test.o
test.o:     file format elf32-i386

Disassembly of section .text:

00000000 <main>:
   0:    55                       push   %ebp
   1:    89 e5                    mov    %esp,%ebp
   3:    83 ec 10                 sub    $0x10,%esp
   6:    c7 45 f8 00 00 00 00     movl   $0x0,-0x8(%ebp)
   d:    c7 45 fc 00 00 00 00     movl   $0x0,-0x4(%ebp)
  14:    8b 45 f8                 mov    -0x8(%ebp),%eax
  17:    01 45 fc                 add    %eax,-0x4(%ebp)
  1a:    8b 45 fc                 mov    -0x4(%ebp),%eax
  1d:    c9                       leave  
  1e:    c3                       ret    

可以使用nm查看目标文件中的符号信息:

[GCC@localhost test]$ nm test.o
00000000 T main

也可以使用readelf工具查看目标文件的ELF信息。

[GCC@localhost test]$ readelf -a test.o
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              REL (Relocatable file)
  Machine:                           Intel 80386
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          0 (bytes into file)
  Start of section headers:          200 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           0 (bytes)
  Number of program headers:         0
  Size of section headers:           40 (bytes)
  Number of section headers:         9
  Section header string table index: 6

Section Headers:
  [Nr] Name              Type          Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL          00000000 000000 000000 00      0   0  0
  [ 1] .text             PROGBITS      00000000 000034 00001f 00  AX  0   0  4
  [ 2] .data             PROGBITS      00000000 000054 000000 00  WA  0   0  4
  [ 3] .bss              NOBITS        00000000 000054 000000 00  WA  0   0  4
  [ 4] .comment          PROGBITS      00000000 000054 00002e 01  MS  0   0  1
  [ 5] .note.GNU-stack   PROGBITS      00000000 000082 000000 00      0   0  1
  [ 6] .shstrtab         STRTAB        00000000 000082 000045 00      0   0  1
  [ 7] .symtab           SYMTAB        00000000 000230 000080 10      8   7  4
  [ 8] .strtab           STRTAB        00000000 0002b0 00000d 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings)
  I (info), L (link order), G (group), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

There are no section groups in this file.

There are no program headers in this file.

There are no relocations in this file.

There are no unwind sections in this file.

Symbol table '.symtab' contains 8 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 00000000     0 FILE    LOCAL  DEFAULT  ABS test.c
     2: 00000000     0 SECTION LOCAL  DEFAULT    1 
     3: 00000000     0 SECTION LOCAL  DEFAULT    2 
     4: 00000000     0 SECTION LOCAL  DEFAULT    3 
     5: 00000000     0 SECTION LOCAL  DEFAULT    5 
     6: 00000000     0 SECTION LOCAL  DEFAULT    4 
     7: 00000000    31 FUNC    GLOBAL DEFAULT    1 main

No version information found in this file.

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用下载工具
今天是玩 SUSE 10的第 二 天装的 软件如下:    suse 10体验版     Eclipse 3.
614 0
[开源] 分享导出博客园文章成本地 Markdown 文件存储的工具
此文主要分享了如何将自己博客园的文章自动导出到 Markdown 文档进行存储,以便在本地进行归档管理,程序中也对文章的分类、tag、代码块以及文章中的图片进行了保存处理,以便上传到自己的图。 整理后的 Markdown 可以在本地整理成册或者发布到自己的个人博客上,比如我使用 Markdown 书写的 个人博客 。
822 0
Linux 常用性能工具简介.
一、wget 文件下载 使用wget下载单个文件:wget URL 下载并以不同的文件名保存:wget -O wordpress.zip URL wget限速下载:wget --limit-rate=300k URL 使用wget断点续传:wget -c URL 使用wget后台下载:wg...
1059 0
性能测试工具选择策略——仿真度对比测评分析报告
基于 AI 的软件自动化测试工具的特征介绍
692 0
StringUtils工具类常用方法
前言:工作中看到项目组里的大牛写代码大量的用到了StringUtils工具类来做字符串的操作,便学习整理了一下,方便查阅。 isEmpty(String str) 是否为空,空格字符为false isNotEmpty(String str) 是否为非空,空格字符为true isBlank(S...
815 0
十大网站管理工具
引用:http://www.williamlong.info/archives/1278.html 当网站发展到一定的规模,站长就应该开始考虑要为网站托管服务器。通常情况下服务器会被放到电信或网通的机房,网站管理员通过远程来管理服务器。
914 0
地理配准工具条为灰色
在准备数据矢量过程中,地理配准工具可能是最先要用到的,在自定义中加载"地理配准"工具条后,发现其图层列表为灰色,不可选。 查看帮助后得知:地理配准 工具条图层列表将显示栅格图层、影像服务图层和 CAD 图层作为有效数据类型。
1962 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载