Ubuntu版本:ubuntu-gnome-16.04-desktop-amd64,gnome版
-----------------------------------------------------------------------------------
objdump命令是用查看目标文件或者可执行的目标文件的构成的gcc工具。
1. 准备代码hello.c
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>MODULE_LICENSE("GPL");
MODULE_AUTHOR("baoli");
MODULE_DESCRIPTION("hello world module");static int __init hello_init(void)
{int * p = 0;printk(KERN_WARNING "hello world.\n");*p = 1;return 0;
}static void __exit hello_exit(void)
{printk(KERN_WARNING "hello exit!\n");
}module_init(hello_init);
module_exit(hello_exit);
2. 编译&安装模块
编译成ko模块后,执行isnmod hello.ko,显示killed安装失败。
用dmesg内核日志,可以看到内核跑出了Oops异常:
给出了原因:不能访问NULL指针
错误发生位置:hello_init+0x10,即hello_init偏移0x10处,可以反汇编查看此处对应的具体指令。
3. 反汇编分析
执行:objdump -d hello.o > assemble.txt
汇编代码如下:
hello.o:     file format elf64-x86-64Disassembly of section .init.text:0000000000000000 <init_module>:
MODULE_LICENSE("GPL");
MODULE_AUTHOR("baoli");
MODULE_DESCRIPTION("hello world module");static int __init hello_init(void)
{0: 55                      push   %rbp1:   48 c7 c7 00 00 00 00    mov    $0x0,%rdi8:  48 89 e5                mov    %rsp,%rbpb:  e8 00 00 00 00          callq  10 <init_module+0x10>10:  c7 04 25 00 00 00 00    movl   $0x1,0x017:  01 00 00 00 1b: 31 c0                   xor    %eax,%eax1d: 5d                      pop    %rbp1e:  c3                      retq   Disassembly of section .exit.text:0000000000000000 <cleanup_module>:0: 55                      push   %rbp1:   48 c7 c7 00 00 00 00    mov    $0x0,%rdi8:  48 89 e5                mov    %rsp,%rbpb:  e8 00 00 00 00          callq  10 <cleanup_module+0x10>10:   5d                      pop    %rbp11:  c3                      retq   
可以看到hello_init+0x10处对应汇编指令为movl $0x1,0x0,即*p = 1;
通过objdump反汇编Oops可以轻松的知道错误原因及位置。
4. objdump总结
1)objdump -d:反汇编目标文件中包含的可执行指令。
2)如果需要混合显示源码和汇编代码,需要加上-S选项,并且在编译目标文件时加上-g。
3)如果在编译目标文件时没有加-g选项,则-S相当于-d。
4)-S选项生成的混合代码,有时文件结构混乱,可读性较差。推荐使用-d选项,直接阅读汇编代码。

实例分析objdump反汇编用法相关推荐

  1. objdump反汇编用法示例

    objdump反汇编用法示例 原文:http://blog.csdn.net/zoomdy/article/details/50563680 -d:将代码段反汇编 -S:将代码段反汇编的同时,将反汇编 ...

  2. python asyncio回调函数_python回调函数用法实例分析

    python回调函数用法实例分析 本文实例讲述了python回调函数用法.分享给大家供大家参考.具体分析如下: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步 ...

  3. config database.php,CodeIgniter配置之database.php用法实例分析

    这篇文章主要介绍了CodeIgniter配置之database.php用法,结合实例形式较为详细的分析总结了CodeIgniter常用的数据库连接方式,需要的朋友可以参考下 本文实例分析了CodeIg ...

  4. python中max函数用法_Python中max函数用法实例分析

    Python中max函数用法实例分析 更新时间:2015年07月17日 15:45:09 作者:优雅先生 这篇文章主要介绍了Python中max函数用法,实例分析了Python中max函数的功能与使用 ...

  5. java list用法_Java List 用法详解及实例分析

    Java List 用法详解及实例分析 Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺 ...

  6. php 类常量用法,php类常量用法实例分析

    这篇文章主要介绍了php类常量用法,实例分析了php中类常量的概念.特性与相关使用技巧,需要的朋友可以参考下 本文实例讲述了php类常量用法.分享给大家供大家参考.具体如下: '; echo Foo: ...

  7. python中event的用法_Python编程之event对象的用法实例分析

    本文实例讲述了Python编程中event对象的用法.分享给大家供大家参考,具体如下: Python提供了Event对象用于线程间通信,它是由线程设置的信号标志,如果信号标志位为假,则线程等待直到信号 ...

  8. python中property函数_python 邮件表格Python中property函数用法实例分析

    本文实例讲述了Python中property函数用法.分享给大家供大家参考,具体如下: 通常我们在访问和赋值属性的时候,都是在直接和类(实例的)的__dict__打交道,或者跟数据描述符等在打交道.但 ...

  9. PHP - 回调函数概念与用法实例分析 - 学习/实践

    1.应用场景 主要用于理解回调函数的概念, 对比JavaScript中的回调函数, 更加深刻理解回调函数的本质, 以及如何高效使用~~~ 2.学习/操作 1. 文档阅读 https://www.jb5 ...

最新文章

  1. 2022-2028年中国服装电商行业发展战略规划及投资方向研究报告
  2. 换掉VMware?轻量级虚拟机,横空出世!
  3. 数字图像处理3:取样和量化
  4. 【1】青龙面板入门系列教程之服务器的选择及初始化
  5. C++:读写二进制文件到double数组
  6. 原阿里中供梁法锋:O2O产品的地推管理 | SHARE 2015产品经理O2O论坛实录
  7. JVM指令:invokeSpecial/invokeVirtual/invokeStatic/invokeInterface/invokeDynamic方法调用指令
  8. ubuntu之ufw防火墙
  9. 微电子科学与工程要学计算机吗,微电子科学与工程专业就业前景如何 有前途吗...
  10. 华为云ROMA,联接企业应用的现在与未来
  11. html5怎么在画布怎么旋转,javascript – 如何旋转HTML5画布的现有内容?
  12. popoupwindow 点击背景消失_两种去除背景音乐保留原声的高效方法
  13. Apache Struts 修复 OGNL 技术中可能存在的 RCE 缺陷
  14. Ubuntu - 新建管理员用户
  15. NotImplementedError
  16. centos安装wget_宝塔是干什么的?3分钟教会你云服务器上安装宝塔面板
  17. 【持续更新】总结国内外图形学物理模拟相关学者和网站
  18. 【n卡】GeForce Experience 的额外功能
  19. c语言作业系统课设设计,C语言程序课程设计心得体会
  20. 金山词霸划译功能对IDE的影响

热门文章

  1. 公布自己的pods到CocoaPods trunk 及问题记录
  2. JavaScript模仿块级作用域
  3. MySql查找几个字段的值一样的记录
  4. CGRectInset CGRectoffset UIEdgeInsetsInsetRect 这三个函数的使用情况
  5. myeclipse 运行速度慢的解决方案
  6. linux 多域名绑定
  7. 测试mysql连接服务器_实现服务器与数据库的连接
  8. 4位先行进位加法器_行波进位/超前进位加法器详解
  9. MySQL远程用户授权
  10. mysql storage_mySQL__storage课堂笔记和练习