网络安全参考 | UNIX参考 | GPS参考 | 无线参考 | 在线手册 | OSBUG.ORG | SUNNY-NETWORK.COM
天线制作 GPS 地标
网站地图 RSS订阅
高级搜索 收藏本站
Home | 业界动态 | Open source | GNU | Linux | BSD | Solaris | AIX | HP-UX | IRIX | Mac OS X | Minix | Tru64 | SCO UNIX | Network | Security | X-Window | Database | 应用服务 | Programming | 经典著作 | 永远的纪念 | 杂项
 当前位置: Home > Linux > 内核 > 文章  
利用异常表处理Linux内核态缺页异常
文章来源: 天极博客 文章作者: 发布时间: 2006-10-23   字体: [ ]  
 

$ gcc -S hello.c

/* hello.s */
 movl -60(%ebp), %eax
 andl $3, %eax
 movl -60(%ebp), %edx
 movl %edx, %ecx
 shrl $2, %ecx
 leal -56(%ebp), %edi
 movl -12(%ebp), %esi
#APP
 0: rep; movsl
 movl %eax,%ecx
1: rep; movsb
2:
.section .fixup,"ax"
3: lea 0(%eax,%ecx,4),%ecx
 jmp 2b
.previous
.section __ex_table,"a"
 .align 4
 .long 0b,3b
 .long 1b,2b
.previous
#NO_APP
 movl %ecx, %eax

  从上面通过gcc生成的汇编程序中,我们可以很容易的找到访问用户地址空间的指令,也就是程序中的标号为0和1的两条语句。而程序中伪操作.section的作用就是定义了.fixup和__ex_table这样的两个段,那么这两段在可执行程序中又是如何安排的呢?下面就通过objdump给读者一个直观的概念:

$ objdump --section-headers hello
hello: file format elf32-i386

Sections:

Idx Name     Size   VMA    LMA    File off Algn
 0 .interp    00000013 080480f4 080480f4 000000f4 2**0
 CONTENTS, ALLOC, LOAD, READONLY, DATA
 ………………………………
 9 .init     00000018 080482e0 080482e0 000002e0 2**2
 CONTENTS, ALLOC, LOAD, READONLY, CODE
 10 .plt     00000070 080482f8 080482f8 000002f8 2**2
 CONTENTS, ALLOC, LOAD, READONLY, CODE
 11 .text     000001c0 08048370 08048370 00000370 2**4
 CONTENTS, ALLOC, LOAD, READONLY, CODE
 12 .fixup    00000009 08048530 08048530 00000530 2**0
 CONTENTS, ALLOC, LOAD, READONLY, CODE
 13 .fini     0000001e 0804853c 0804853c 0000053c 2**2
 CONTENTS, ALLOC, LOAD, READONLY, CODE

 
推荐文章
·浅谈关于Linux系统内核的源代码
·打造适合自己Slackware机器的内
·自己动手做一个最小的Linux kern
·一个Linux爱好者的2.6.11内核编
·定制Linux系统内核,发挥Linux潜
·如何编译一个操作系统内核-Ubunt
·重新编译Linux操作系统的内核指
·快速编译Linux内核需要的模块方
·编译内核以使其支持PS并口改装手
·编译支持NTFS的Linux系统内核模
·配置、编译Linux系统内核的实用
·Linux操作系统的内核编译详细步
·Linux操作系统的内核编译内幕详
·Linux基础知识:内核编译-内核管
 

 
↑返回顶部   打印本页   关闭窗口↓  

Google
 
Web oldhand.org unixreference.net meshmea.org
相关分类
热点文章
·Linux中的Ramdisk与Init
·Linux 初始 RAM 磁盘(i
·一个Linux爱好者的2.6.1
·自己动手做一个最小的Li
·如何在Linux系统中添加
·如何编译一个操作系统内
·udev轻松上路
·Linux2.6内核驱动移植
相关文章
·教你怎样隐藏Linux 2.6
·Linux 2.6新内核的设计
·技术奇迹--Linux内核2.6
·Linux下用明智的账户管
·让arm-linux支持普通USB
·通过Linux系统伪装方法
·分析Linux操作系统内核
·如何在Linux系统中添加
更多...
 
 

Copyright(c) 2001-2009 OLDHAND ORGANIZATION, All Rights reserved.
Power by DedeCms 织梦内容管理系统