首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

GNU汇编总结 02

GNU汇编总结 02

二,GNU汇编工具系列
   
    ################################################################################################
   
    1, 二进制工具系列
   
    addr2line           把地址转换成文件名或者行号
   
    ar                  创建 修改或者展开文件存档
   
    as                  把汇编语言代码汇编成目标代码
   
    常用选项:
   
    -a          -> 指定输出中包含那些清单
   
    -D          -> 包含它用于向下兼容 但是被忽略
   
    --defsym    -> 在汇编代码之前定义符号和值
   
    -f          -> 快速汇编跳过注释和空白
   
    --gstabs    -> 包含每行源代码的调试信息
   
    --gstats+ -> 包含gdb专门的调试信息
   
    -I          -> 指定包含文件的目录
   
    -J          -> 不警告带符号溢出
   
    -L          -> 在符号表中保存本地符号
   
    -o          -> 给定输出目标名
   
    -R          -> 把数据段合并进文本段
   
    --statistics -> 显示汇编使用的最大空间和总时间
   
    -v          -> 显示as的版本号
   
    -W          -> 不显示警告信息
   
    c++filt             还原c++符号的过滤器
   
    gprof               显示程序简档信息的程序
   
    ld                  把目标代码文件转换成可执行文件的转换器
   
    常用选项:
   
    -d          -> 指定目标代码输入文件的格式
   
    -Bstatic    -> 只使用静态库
   
    -Bdynamic -> 只使用动态库
   
    -Bsymbolic-> 把引用捆绑到共享库中的全局符号
   
    -c          -> 从指定的命令文件读取命令
   
    -cref       -> 创建跨引用表
   
    -defsym     -> 在输出文件中创建指定的全局符号
   
    -demangle -> 在错误消息中还原符号名称
   
    -e          -> 使用指定的符号作为程序的初始执行点
   
    -E          -> 对于elf文件把所有的符号添加到动态符号表
   
    -share      -> 创建共享库
   
    -Ttext      -> 使用指定的地址作为文本段的起始点
   
    -Tdata      -> 使用指定的地址作为数据段的起始点
   
    -Tbss       -> 使用指定的地址作为bss段的起始点
   
    -L          -> 把指定的路径添加到库搜索清单
   
    -O          -> 生成优化的输出文件
   
    -o          -> 指定输出名
   
    -oformat    -> 指定输出文件的二进制格式
   
    -R          -> 从指定的文件读取符号和地址
   
    -rpath      -> 把指定的位置添加到运行时库搜索路径
   
    -rpath-link-> 指定搜索运行时共享库的路径
   
    -X          -> 删除本地所有临时符号
   
    -x          -> 删除本地所有符号
   
    nm                  列出目标文件中的符号
   
    objcopy             复制或翻译目标文件
   
    objdump             显示来自目标文件的信息
   
    ranlib              生成存档文件内容的索引
   
    readelf             按照elf格式显示目标文件信息
   
    size                列出目标文件或者存档文件的段长度
   
    strings             显示目标文件中可打印字符串
   
    strip               丢弃符号
   
    windres             编译Microsoft Windows资源文件
   
    2, GNU编译器
   
    gcc
   
    常用选项:
   
    -c     编译或者汇编代码但不进行连接
   
    -S     编译后停止但不进行汇编
   
    -E     预处理后停止但不进行编译
   
    -o     指定输出文件名
   
    -v     显示每个编译阶段使用的命令
   
    -std 指定使用的语言标准
   
    -g     生成调试信息
   
    -pg    生成gprof制作简档要使用的额外代码
   
    -O     优化可执行代码
   
    -W     设置编译器警告级别
   
    -I     指定包含文件清单
   
    -L     指定库文件目录
   
    -D     预定义源代码中使用的宏
   
    -U     取消任何定义了的宏
   
    -f     指定控制编译器行为的选项
   
    -m     指定与硬件相关的选项
   
    3, GNU调试程序
   
    gdb
   
    常用选项:
   
    -d       指定远程调试时串行接口的线路速度
   
    -batch 以批处理模式运行
   
    -c       指定要分析的核心转储文件
   
    -cd      指定工作目录
   
    -d       指定搜索源文件的目录
   
    -e       指定要执行的文件
   
    -f       调试时以标准格式输出文件名和行号
   
    -q       安静模式
   
    -s       指定符号的文件名
   
    -se      指定符号和要执行的文件名
   
    -tty     设置标准输出和输入设备
   
    -x       从指定的文件执行gdb命令
   
    由于gnu调试时忽略开始处断点, 需要在开始标签处执行一个空指令
   
    如:
   
    .globl _start
   
    _start:
   
    nop
   
    此时断点可以设置成 break *_start+1
   
    查看寄存器状态info registers
   
    使用print命令查看特定寄存器或者变量的值, 加上修饰符可以得到不同的输出格式:
   
    print/d    显示十进制数字
   
    print/t    显示二进制数字
   
    print/x    显示16进制数字
   
    使用x命令可以查看特定内存的值:
   
    x/nyz
   
    其中 n为要显示的字段数
   
    y时输出格式, 它可以是:
   
    c 用于字符, d用于十进制, x用于16进制
   
    z是要显示的字段长度, 它可以是:
   
    b用于字节, h用于16字节, w用于32位字
   
    如:
   
    x/42cb    用于显示前42字节
返回列表