注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 操作系统 > Linux > 内容正文

利用异常表处理Linux内核态缺页异常

发布时间:2006-10-23 12:10:21 来源:天极博客 网友评论 0 条
  上面通过objdump显示出来的可执行程序的头部信息中,有一些是读者所熟悉的,例如.text、.data以及被笔者省略掉的.bss,而我们所关心的是12和15,也就是.fixup和__ex_table。对照hello.s中段的定义来看,两个段声明中的FLAGS字段分别为'ax'和'a',而objdump的结果显示,.fixup段是可重定位的代码段,__ex_table段是可重定位的数据段,两者是吻合的。

  那么为什么要通过.section定义独立的段呢?为了解开这个问题的答案,我们需要进一步看看我们所写的代码在可执行文件中是如何表示的。

  

$objdump --disassemble --section=.text hello   hello:   file format elf32-i386      Disassembly of section .text:   8048498: 8b 45 c4       mov   0xffffffc4(%ebp),%eax   804849b: 83 e0 03       and   $0x3,%eax   804849e: 8b 55 c4       mov   0xffffffc4(%ebp),%edx   80484a1: 89 d1        mov   %edx,%ecx   80484a3: c1 e9 02       shr   $0x2,%ecx   80484a6: 8d 7d c8       lea   0xffffffc8(%ebp),%edi   80484a9: 8b 75 f4       mov   0xfffffff4(%ebp),%esi   80484ac: f3 a5        repz movsl %ds:(%esi),%es:(%edi)   80484ae: 89 c1        mov   %eax,%ecx   80484b0: f3 a4        repz movsb %ds:(%esi),%es:(%edi)   80484b2: 89 c8        mov   %ecx,%eax

  前面的hello.s中的汇编片断在可执行文件中就是通过上面的11条指定来表达,读者也许会问,由.section伪操作定义的段怎么不见了?别着急,慢慢往下看,由.section伪操作定义的段并不在正常的程序执行路径上,它们是被安排在可执行文件的其它地方了:

  

 $objdump --disassemble --section=.fixup hello   hello:   file format elf32-i386      Disassembly of section .fixup:      08048530 <.fixup>:   8048530: 8d 4c 88 00      lea  0x0(%eax,%ecx,4),%ecx   8048534: e9 79 ff ff ff    jmp  80484b2 <main+0x42>

  由此可见,.fixup是作为一个单独的段出现在可执行程序中的,而此段中所包含的语句则正好是和源程序hello.c中的两条语句相对应的。

  将.fixup段和.text段独立开来的目的是为了提高CPU流水线的利用率。熟悉体系结构的读者应该知道,当前的CPU引入了流水线技术来加快指令的执行,即在执行当前指令的同时,要将下面的一条甚至多条指令预取到流水线中。这种技术在面对程序执行分支的时候遇到了问题:如果预取的指令并不是程序下一步要执行的分支,那么流水线中的所有指令都要被排空,这对系统的性能会产生一定的影响。在我们的这个程序中,如果将.fixup段的指令安排在正常执行的.text段中,当程序执行到前面的指令时,这几条很少执行的指令会被预取到流水线中,正常的执行必然会引起流水线的排空操作,这显然会降低整个系统的性能。

  下面我们就可以看到异常表是如何形成的了:

  

$objdump --full-contents --section=__ex_table hello   hello:   file format elf32-i386      Contents of section __ex_table:   8048578 ac840408 30850408 b0840408 b2840408 ....0...........

  由于x86使用小尾端的编址方式,上面的这段数据比较凌乱。让我把上面的__ex_table中的内容转变成大家通常看到的样子,相信会更容易理解一些:

  

8048578 80484ac 8048530 80484b0 80484b2 ....0...........

  上面的红色部分就是我们最感兴趣的地方,而这段数据是如何形成的呢?将前面objdump生成的可执行程序中的汇编语句和hello.c中的源程序结合起来看,就可以发现一些有趣的东西了!

  先让我们回头看看hello.c中__ex_table段的语句 .long 0b,3b。其中标签0b(b代表backward,即往回的标签0)是可能出现异常的指令的地址。结合objdump生成的可执行程序.text段的汇编语句可以知道标签0就是80484ac:

  原始的汇编语句:

  

0: rep; movsl

  链接到可执行程序后:

  

80484ac: f3 a5 repz movsl %ds:(%esi),%es:(%edi)

上一页 1 2 3 4 5 下一页
关于 Linux 操作系统 系统故障 无法访问 的新闻
  • Linux下的中文显示和支持常见问题解答
  • Linux系统出现乱码问题的终极解决方法
  • Linux 命令行下如何配置nVIDIA显卡
  • Linux如何处理当前运行环境的环境变量
  • Linux脚本开发数学库在PHP中的重要性
【评论】【收藏本文】【打印】【关闭】
上一篇文章:Linux系统出现乱码问题的终极解决方法
下一篇文章:Linux下的中文显示和支持常见问题解答
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
Linux操作系统文件系统的桌面应用
Linux操作系统文件系统的桌面应用
Linux设备驱动编程之定时器
Linux设备驱动编程之定时器
Windows外衣Linux心 红旗桌面版详测
Windows外衣Linux心 红旗桌面版详测
超实用 Linux下通过VNC安装Oracle
超实用 Linux下通过VNC安装Oracle
全站资源
  • 微软官方入门教程19:轻松掌握Vista系统的快
  • 微软2008大冲击,预借Vista SP1力促Vista市
  • 在收件箱中获得 Windows Vista 的最新更新
  • 微软官方Vista入门教程全集19篇(Vista学院
  • Windows Vista 的成功将势不可挡
  • 快快抛弃Vista,拥抱XP SP3!你觉得呢?
  • 浅谈Vista系统关闭虚拟内存与使用内存盘加速
  • 嘿嘿,按下键盘上面的三个键,马上让你的Vi
  • Windows Vista的盗版率只有Windows XP的一半
  • 3DMark和PCMark Vantage新版将只支持Vista系
阅读排行
  • Windows外衣Linux心 红旗桌面版详测
  • 扮酷你的桌面 Linux超靓壁纸下载(多图)
  • Linux安装流程
  • 浅谈Linux的内核
  • RedHat Linux9.0安装实例(1)
  • ARM的嵌入式Linux移植体验之基本概念
  • Linux安装要点
  • 红旗Linux桌面版5.0BETA版OS
  • 如何在大硬盘上安装Linux
  • RealPlayer流媒体播放器Linux版
最新技术文档
  • Linux步入Unix的后尘-铁甲Linux出现
  • Linux内核中的同步和互斥分析报告
  • Linux操作系统文件系统的桌面应用
  • Linux设备驱动编程之定时器
  • 嵌入式Linux操作系统启动信息完全注释
  • 在Linux操作系统中实现内部进程通信
  • Linux大腕警告称开源软件存在安全问题
  • Linux下双网卡绑定技术实现负载均衡
  • 深入浅出Linux操作系统的优化和微调
  • Linux下的中文显示和支持常见问题解答
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载