GNU汇编器
gnu binutils软件包的所有程序
包 | 描述 |
---|---|
addr2line | 把地址转换为文件名和行号 |
ar | 创建、修改和展开文件存档 |
as | 把汇编语言代码汇编成目标文件 |
c++filt | 还原C++符号的过滤器 |
gprof | 显示程序简档信息的程序 |
ld | 把目标代码文件链接为可执行文件 |
nlmconv | 把目标代码转换成Netware Loadable Module格式 |
nm | 列出目标文件中的符号 |
objcopy | 复制和翻译目标文件 |
objdump | 显示来自目标文件的信息 |
ranlib | 生成存档文件内容的索引 |
readelf | 按照ELF格式显示来自目标文件的信息 |
size | 列出目标文件或者存档文件的段长度 |
strings | 显示目标文件中的可打印字符串 |
strip | 丢弃符号 |
windres | 编译Microsoft Windows资源文件 |
使用汇编器as
as [-a [cdhlns] [=file]] [-D] [–defsym sym=val] [-f] [–gstabs] [–gstabs+] [–gdwarf2] [–help] [-I dir] [-J] [-K] [-L]
[–listing-lhs-width=NUM] [–listing-lhs-width2= NUM] [–listing-rhs-width=NUM] [–listing-cont-lines=NUM]
[–keep-locals] [-o objfile] [-R] [–statistics] [-V] [-version] [–version] [-W] [–warn] [–fatal-warnings] [-w] [-x]
[-Z] [–target-help] [target-options]
参数 | 描述 |
---|---|
-a | 指定输出中包含哪些清单 |
-D | 包含它用于向下兼容 |
–defsym | 在汇编源代码之前定义符号和值 |
-f | 快速汇编,跳过注释和空白 |
–gstabs | 包含每行源代码的调试信息 |
–gstabs+ | 包含专门的gdb调试信息 |
-I | 指定搜索包含文件的目录 |
-J | 不警告带符号溢出 |
-K | 包含它用于向下兼容 |
-L | 在符号表中保存本地符号 |
–listing-lhs-width | 设置输出数据列的最大宽度 |
–listing-lhs-width2 | 设置连续行的输出数据列的最大宽度 |
–listing-rhs-width | 设置输入源代码行的最大宽度 |
–listing-cont-lines | 设置输入的单一行在清单中输出最大行数 |
-o | 指定输出目标文件的名称 |
-R | 把数据段合并进文本段 |
–statistics | 显示汇编使用的最大空间和总时间 |
-v | 显示as的版本号 |
-W | 不显示警告消息 |
– | 对于源文件使用标准输入 |
例子:as -o test.o test.s
GNU链接器ld
ld [-o output] objfile…
参数 | 描述 |
---|---|
-b | 指定目标代码输入文件的格式 |
-Bstatic | |
-Bdynamic | 只使用动态库 |
-Bsymbolic | 把引用捆绑到共享库中的全局符号 |
-c | 从指定的命令文件读取命令 |
–cref | 创建跨引用表 |
-d | 设置空格给通用符号,即使指定了可重定位输出 |
-defsym | 在输出文件重创建指定的全局符号 |
–demangle | 在错误信息中还原符号名称 |
-e | 使用指定的符号作为程序的初始执行点 |
-E | 对于ELF格式文件,把所有符号添加到动态符号表 |
-f | 对于ELF格式共享文件,设置DT_AUXILIARY名称 |
-F | 对于ELF格式共享文件,设置DT_FILTER名称 |
-format | 指定目标代码输入文件的格式,和-b相同 |
-g | 忽略,用于提供和其他工具的兼容性 |
-h | 对于ELF格式共享文件对象,设置DT_SONAME名称 |
-i | 执行增量链接 |
-I | 把指定的存档文件添加到要链接的文件清单 |
-L | 把指定的路劲添加到搜索库的目录清单 |
-M | 显示链接映射,用于诊断目的 |
-Map | 创建指定的文件来包含链接映射 |
-m | 模拟指定的链接器 |
-N | 指定读取/写入文本和数据段 |
-n | 设置文本段为只读 |
-noinhibit-exec | 生成输出文件,即使出现非致命链接错误 |
-no-keep-memory | 为内存使用优化链接 |
-no-warn-mismatch | 允许链接不匹配的目标文件 |
-O | 生成优化了的输出文件 |
-o | 指定输出文件的名称 |
-oformat | 指定输出文件的二进制格式 |
-R | 从指定的文件读取符号名称和地址 |
-r | 生成可重定位的输出 |
-rpath | 把指定的目录添加到运行时库搜索路劲 |
-rpath-link | 指定搜索运行时共享库的目录 |
-S | 忽略来自输出文件的调试器符号信息 |
-s | 忽略来自输出文件的所有符号信息 |
-shared | 创建共享库 |
-sort-common | 在输出文件中不按照长度对符号进行排序 |
-split-by-reloc | 按照指定的长度在输出文件中创建额外的段 |
-spilt-by-file | 为每个目标文件在输出文件中创建额外的段 |
–section-start | 在输出文件中指定的地址定位指定的段 |
-T | 指定链接命令文件,和-c相同 |
-Ttest | 使用指定的地址作为文本段的起始点 |
-Tdata | 使用指定的地址作为数据段的起始点 |
-Tbss | 使用指定的地址作为bss段的起始点 |
-t | 在处理输入文件时显示它们的名称 |
-u | 强制指定符号在输出文件中作为未定义符号 |
-warn-common | 当一个通用符号和另一个通用符号结合时发出警告 |
-warn-constructors | 如果没有使用任何全局构造器,则发出警告 |
-warn-once | 对于每个未定义符号只发出一次警告 |
-warn-section-align | 如果为了对齐而改动输出段地址,则发出警告 |
-whole-archive | 对于指定的存档文件,在存档中包含所有文件 |
-X | 删除所有本地临时符号 |
-x | 删除所有本地符号 |
例子:ld -o test test.o
GNU编译器gcc
gcc [-c | -S | -E] [-std=standard] [-g] [-pg] [-Olevel] [-Wwarn…] [-pedantic] [-Idir…]
[-Ldir…] [-Dmacro [=defn]…] [-Umacro] [-foption…] [-mmachine-option…] [-o outfile] infile…
参数 | 描述 |
---|---|
-c | 编译或者汇编代码,但是不进行链接 |
-S | 编译后停止,但是不进行汇编 |
-E | 预处理后停止,但是不进行编译 |
-o | 指定要使用的输出文件名 |
-v | 显示每个编译阶段使用的命令 |
-std | 指定使用的语言标准 |
-g | 生成调试信息 |
-pg | 生成gpro制作简档要使用的额外代码 |
-O | 优化可执行代码 |
-W | 设置编译器警告消息级别 |
-pedantic | 按照C标准发布强制性诊断清单 |
-I | 指定包含文件的目录 |
-L | 指定库文件的目录 |
-D | 预定义源代码中使用的宏 |
-U | 取消任何定义了的宏 |
-f | 指定用于控制编译器行为的选项 ,列如位置无关代码-fPIC或-fPIE |
-m | 指定与硬件相关的选项 |
例子:gcc -o text text.c
GNU调试器gdb
gdb [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps] [-tty=dev] [-s symfile] [-e prog] [-se prog] [-x cmds] [-d dir]
[prog [core | procID]]
参数 | 描述 |
---|---|
-b | 设置远程调试时串行接口的线路速度 |
-batch | 以批处理模式运行 |
-c | 指定要分析的核心转储文件 |
-cd | 指定工作目录 |
-d | 指定搜索源文件的目录 |
-e | 指定要执行的文件 |
-f | 调试时以标准格式输出文件名和行号 |
-nx | 不执行来自.gdbinit文件的命令 |
-q | 安静模式,不输出介绍 |
-s | 指定符号的文件名 |
-se | 指定符号和要执行的文件名 |
-tty | 设置标准输入和输出设备 |
-x | 从指定的文件执行gdb命令 |
例子:gcc -gstabs -o test test.c
KDE调试器(kdbg)
是使用图形界面的调试器
kgdb调试器
使用Visual Studio和KGDB调试内核代码教程:https://sysprogs.com/VisualKernel/tutorials/kgdb
GNU objdump程序
objdump [-d | --disassemble]
参数 | 描述 |
---|---|
-a | 如果任何文件时存档文件,则显示存档头文件 |
-b | 指定目标代码文件的目标代码格式 |
-C | 将低级符号还原为用户级别的名称 |
-d | 把目标代码反汇编为指令码 |
-D | 把所有段反汇编为指令码,包括数据 |
-EB | 指定大尾端目标文件 |
-EL | 指定小尾端目标文件 |
-f | 显示每个文件头的摘要信息 |
-G | 显示调试段的内容 |
-h | 显示每个文件段头的摘要信息 |
-i | 显示所有架构和目标格式的清单 |
-j | 只显示指定段的信息 |
-l | 使用源代码行号标记输出 |
-m | 指定进行反汇编时使用的架构 |
-p | 显示目标文件格式持有的信息 |
-r | 显示文件中的重定位条目 |
-R | 显示文件中的动态重定位条目 |
-s | 显示指定段的完整内容 |
-S | 交错显示源代码和反汇编后的代码 |
-t | 显示文件的符号表数目 |
-T | 显示文件的动态符号表条目 |
-x | 显示文件所有可用的头信息 |
–start-address | 开始显示在指定地址上的数据 |
–stop-address | 停止显示在指定地址上的数据 |
例子:objdump -d test.o
GNU简档器程序gprof
gprof [-I dirs]
输出格式参数
参数 | 描述 |
---|---|
-A | 显示所有函数的源代码,或者只显示指定函数的源代码 |
-b | 不显示解释分析字段的详细输出 |
-C | 显示所有函数的总计数,或者只显示指定函数的次数 |
-i | 显示简档数据文件的摘要信息 |
-I | 指定查找源文件的搜索目录清单 |
-J | 不显示注释的源代码 |
-L | 显示源文件名的完整路径名称 |
-p | 显示所有函数的一般简档,或者只显示指定函数的简档 |
-P | 不输出所有函数的一般简档,或者不显示指定函数的简档 |
-q | 显示调用图表分析 |
-Q | 不显示调用图表分析 |
-y | 在单独的输出文件中生成注释的源代码 |
-Z | 不显示函数的总技术和被调用的次数 |
–function-recordering | 按照分析显示建议的函数的重排序 |
–file-ordering | 按照分析显示建议的目标文件中重排序 |
-T | 按照传统的BSD样式显示输出 |
-w | 设置输出行的宽度 |
-x | 在函数之内显示被注释的源代码行中的每一行 |
–demangle | 在显示输出时,C++符号被还原 |
分析参数
参数 | 描述 |
---|---|
-a | 不分析静态声明或私有的函数的信息 |
-c | 分析程序中永远不会被调用的子函数的信息 |
-D | 忽略已知不是函数的符号(只在Solaris和HP操作系统上) |
-k | 不分析匹配开头和结尾的symspec的函数 |
-l | 按行分析程序,而不是按照函数 |
-m | 只分析被调用超过指定次数的函数 |
-n | 只分析指定的函数的时间 |
-N | 不分析指定的函数的时间 |
-z | 分析所有函数,即使是从不被调用的哪些函数 |
杂项参数
参数 | 描述 |
---|---|
-d | 使gprof处于调试模式中,指定数字化的调试级别 |
-O | 指定简档数据文件的格式 |
-s | 使gprof只在简档数据文件中汇总数据 |
-v | 输出gprof的版本 |
例子:
gcc -o demo demo.c -pg
gprof demo > gprof.txt