gcc objdump反汇编

Linux 内核panic调试oops信息及栈回溯

一、gcc编译

1、gcc编译过程:预处理->编译->汇编->链接

一步编译、连接

gcc无需加选项,直接生成可执行文件,如果是Linux内核中,可能要用交叉编译工具链的gcc。如/opt/toolchains/crosstools-arm-gcc-5.5-linux-4.1-glibc-2.26-binutils-2.28.1/usr/bin/arm-buildroot-linux-gnueabi-

对应gcc代码:gcc hello.c –o hello
1.1、预处理 -E

-E作用:**对头文件和宏定义等进行处理

对应gcc代码:gcc –E hello.c –o hello.i
1.2、编译 -S

-S作用:**检查代码是否有语法错误,并将其翻译成汇编语言

对应gcc代码:gcc –S hello.i –o hello.s
1.3、汇编 -c

-c作用:**将编译阶段生产的汇编.s文件,处理为.o目标文件

对应gcc代码:gcc –c hello.s -o hello.o
1.4、链接

**作用:**将多个.o目标文件组装成最后的可执行文件

对应gcc代码:gcc hello.o -o hello
1.5、运行 ./文件名

对应代码:./文件名

Ps:gcc编译多文件举例gcc -o main main.c sub_add.c unsgn_pow.c -I/include -L. -lmymath
其中,-I ./include 告诉gcc在“./include”目录下搜寻头文件
**-L. **表示要链接的库,库名为libmymath.a,链接时写为-lmymath
ps:大致过程应该是没问题的,直接copy的,有时间在验证整理下。。。。。。。

反汇编

objdump 参数介绍

-d: 将代码段反汇编 反汇编那些应该还有指令机器码的section
-D :与 -d 类似,但反汇编所有section
-S: 将代码段反汇编的同时,将反汇编代码和源代码交替显示,源码编译时需要加-g参数,即需要调试信息
-C: 将C++符号名逆向解析
-l: 反汇编代码中插入源代码的文件名和行号
-j section: 仅反编译所指定的section,可以有多个-j参数来选择多个section

具体用法示例如下:

objdump -dS helloworld.ko > helloworld.s //需要注意,编译时需加-g参数,在Makefile EXTRA_CFLAS中添加
vim hellowrold.s

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值