• GCC编译器原理(一)05------GCC 工具:readelf、size、strings、strip和 windres


    1.3.18 readelf:elf 文件格式分析工具

    这个工具和 objdump 命令提供的功能类似,但是它显示的信息更为具体,并且它不依赖 BFD 库( BFD 库是一个 GNU 项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件);

    ELF 文件类型 ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西、以及都以什么样的格式去放这些东西。它自最早在 System V 系统上出现后,被 xNIX 世界所广泛接受,作为缺省的二进制文件格式来使用。可以说,ELF 是构成众多 xNIX 系统的基础之一。

    • ELF文件有三种类型:
      • 可重定位的对象文件(Relocatable file) 由汇编器汇编生成的 .o 文件
      • 可执行的对象文件(Executable file) 可执行应用程序
      • 可被共享的对象文件(Shared object file) 动态库文件,也即 .so 文件
    • ELF文件的节:
      • text section 里装载了可执行代码;
      • data section 里面装载了被初始化的数据;
      • bss section 里面装载了未被初始化的数据;
      • 以 .rec 打头的 sections 里面装载了重定位条目;
      • symtab 或者 .dynsym section 里面装载了符号信息;
      • strtab 或者 .dynstr section 里面装载了字符串信息;

    参数说明

    选项

    描述

    -a

    --all 显示全部信息,等价于 -h -l -S-s -r -d -V -A -I.

    -h

    --file-header 显示elf文件开始的文件头信息.

    -l

    --program-headers --segments 显示程序头(段头)信息(如果有的话)。

    -S

    --section-headers --sections 显示节头信息(如果有的话)。

    -g

    --section-groups 显示节组信息(如果有的话)。

    -t

    --section-details 显示节的详细信息(-S 的)。

    -s

    --syms --symbols 显示符号表段中的项(如果有的话)。

    -e

    --headers 显示全部头信息,等价于: -h -l -S

    -n

    --notes 显示note段(内核注释)的信息。

    -r

    --relocs 显示可重定位段的信息。

    -u

    --unwind 显示unwind段信息。当前只支持 IA64ELF 的 unwind 段信息。

    -d

    --dynamic 显示动态段的信息。

    -V

    --version-info 显示版本段的信息。

    -A

    --arch-specific 显示CPU构架信息。

    -D

    --use-dynamic 使用动态段中的符号表显示符号,而不是使用符号段。

    -x <number or name>

    --hex-dump=<number or name> 以16进制方式显示指定段内内容。number 指定段表中段的索引,或字符串指定文件中的段名。

    -w[liaprmfFsoR]

    --debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges] 显示调试段中指定的内容。

    -I

    --histogram 显示符号的时候,显示 bucketlist 长度的柱状图。

    -v

    --version 显示 readelf 的版本信息。

    -H

    --help 显示 readelf 所支持的命令行选项。

    -W

    --wide 宽行输出。

    @file

    可以将选项集中到一个文件中,然后使用这个 @file 选项载入。

    1.3.19 size

    size 工具,就是列出程序文件中各段的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。

    命令使用格式:size [ option ... ] [ object ... ]

    选项

    描述

    -A –B

    选择以 sysv | berkeley 的样式输出。

    -o | -d | -x

    选择输出数据的格式.

    -t

    选择全部输出

    1.3.20 strings

    strings 工具在对象文件或二进制文件中查找可打印的字符串。字符串是4个或更多可打印字符的任意序列,以换行符或空字符结束。 strings 工具对识别随机对象文件很有用。

    语法:strings [ -a ] [ - ] [ -o ] [ -t Format ] [ -n Number ] [ -Number ] [ file ... ]

    选项

    描述

    -a

    --all

    扫描整个文件而不是只扫描目标文件初始化和装载段

    -f

    –print-file-name

    在显示字符串前先显示文件名

    -n

    –bytes=[number]

    找到并且输出所有 NUL 终止符序列

    -

    设置显示的最少的字符数,默认是 4 个字符

    -t

    --radix={o,d,x}

    输出字符的位置,基于八进制,十进制或者十六进制

    -o

    类似 --radix=o

    -T

    --target=

    指定二进制文件格式

    -e

    --encoding={s,S,b,l,B,L}

    选择字符大小和排列顺序:s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit

    @

    读取中选项

    1.3.21 strip

    strip 工具通过除去绑定程序和符号调试程序使用的信息,减少扩展公共对象文件格式(XCOFF)的对象文件的大小。

    语法 strip [ -V ] [ -r [ -l ] | -x [ -l ] | -t | -H | -e | -E ] [ -X {32 |64 |32_64 }] [ -- ] File ...

    strip 命令减少 XCOFF 对象文件的大小。

    strip 命令从 XCOFF 对象文件中有选择地除去行号信息、重定位信息、调试段、typchk 段、注释段、文件头以及所有或部分符号表。 一旦使用该命令,则很难调试文件的符号;因此,通常应该只在已经调试和测试过的生成模块上使用 strip 命令。使用 strip 命令减少对象文件所需的存储量开销。

    对于每个对象模块,strip 命令除去给出的选项所指定的信息。对于每个归档文件,strip 命令从归档中除去全局符号表。

    可以使用 ar -s 命令将除去的符号表恢复到归档文件或库文件中。

    没有选项的 strip 命令除去行号信息、重定位信息、符号表、调试段、typchk 段和注释段。

    选项

    描述

    -e

    在对象文件的可选头中设置 F_LOADONLY 标志。如果对象文件放置在归档中,则该标志告知绑定程序(ld 命令),在与此归档链接时应忽略该对象文件中的符号。

    -E

    复位(关闭)对象文件的可选头中的 F_LOADONLY 位。(请参阅 -e 标志。)

    -H

    除去对象文件头、任何可选的头以及所有段的头部分。注: 不除去符号表信息。

    -l

    (小写 L)从对象文件中除去行号信息。

    -r

    除了外部符号和静态符号条目,将全部符号表信息除去。不除去重定位信息。同时除去调试段和 typchk 段。这个选项产生一个对象文件,该对象文件仍可以用作输入到链接编辑器(ld 命令)中。

    -t

    除去大多数符号表信息,但并不除去函数符号或行号信息。

    -V

    打印 strip 命令的版本号。

    -x

    除去符号表信息,但并不除去静态或外部符号信息。 -x 标志同时除去重定位信息,因此将不可能链接到该文件。

    -X mode

    指定应检查 strip 的对象文件的类型。 mode 必须是下列之一:

    • 32 只处理 32 位对象文件
    • 64 只处理 64 位对象文件
    • 32_64 既处理 32 位对象文件,又处理 64 位对象文件

    缺省值是处理 32 位对象文件(忽略 64 位对象文件)。也可以用 OBJECT_MODE 环境变量来设置 mode 。例如,OBJECT_MODE=64 使 strip 处理任何 64 位对象文件,并忽略 32 位对象文件。-X 标志重设 OBJECT_MODE 变量。

    --

    (双连字符)将跟随在该标志后的所有参数解释为文件名。这就允许除去名称是以连字符开始的文件。

    1.3.22 windres

    Windows 方面的命令,不涉及

  • 相关阅读:
    CS 系统框架二[完善自动更新]
    CS 系统框架二
    CS 系统框架二[增加默认启动以及代码打开窗体]
    2022届宝鸡质检[1]文数参考答案
    2022届宝鸡质检[1]理数参考答案
    合并DataTable并排除重复数据的通用方法
    IE6鼠标闪烁之谜
    Windows下MemCache多端口安装配置
    XML解析文件出错解决方法
    巧用row_number和partition by分组取top数据
  • 原文地址:https://www.cnblogs.com/kele-dad/p/9471328.html
Copyright © 2020-2023  润新知