Linux2.6对新型CPU快速系统调用的支持
http://tech.ddvip.com 2006年11月20日 社区交流
本文详细介绍Linux2.6对新型CPU快速系统调用的支持
首先是一个静态编译的程序,代码很简单:
main() { getuid(); }将代码加上 static 选项用 gcc 静态编译,然后用 gdb 装载并反编译 main 函数。
[root@test opt]# gcc test.c -o ./static -static [root@test opt]
# gdb ./static (gdb) disassemble main 0x08048204 :
push %ebp 0x08048205 : mov %esp,%ebp 0x08048207 :
sub $0x8,%esp 0x0804820a :
and $0xfffffff0,%esp 0x0804820d :
mov $0x0,%eax 0x08048212 : sub
%eax,%esp 0x08048214 : call 0x804cb20
<__getuid> 0x08048219 : leave 0x0804821a : ret可以看出,main 函数中调用了 __getuid 函数,接着反编译 __getuid 函数。
(gdb) disassemble 0x804cb20 0x0804cb20 <__getuid+0>:
push %ebp 0x0804cb21 <__getuid+1>: mov
0x80aa028,%eax 0x0804cb26 <__getuid+6>: mov
%esp,%ebp 0x0804cb28 <__getuid+8>: test
%eax,%eax 0x0804cb2a <__getuid+10>: jle
0x804cb40 <__getuid+32> 0x0804cb2c <__getuid+12>:
mov $0x18,%eax 0x0804cb31 <__getuid+17>:
call *0x80aa054 0x0804cb37 <__getuid+23>:
pop %ebp 0x0804cb38 <__getuid+24>: ret上面只是 __getuid 函数的一部分。可以看到 __getuid 将 eax 寄存器赋值为 getuid 系统调用的功能号 0x18 然后调用了另一个函数,这个函数的入口在哪里呢?接着查看位于地址 0x80aa054 的值。
责编:豆豆技术应用
正在加载评论...
- Linux/Unix 新闻
- Linux/Unix 入门
- Linux/Unix 命令
- Linux/Unix 安装
- Linux 嵌入式系统
- Linux/Unix 编程
- Linux/Unix 管理
- Linux/Unix 桌面
- Linux/Unix 内核
- Linux/Unix 软件
- SCO Unix
- NetBSD
- OpenBSD
- Redhat/Fedora Linux
- 手机
- Linux/Unix find 搜索命令
- Linux/Unix vi 命令
- Linux/Unix kde 桌面环境
- Linux/Unix GNOME 桌面环境
- Linux/Unix Make 命令
- Linux/Unix crontab 命令
- Linux/Unix ext3 文件系统
- Linux/Unix 文件系统详解
- Linux/Unix ADSL 拨号设置
- Linux/Unix GRUB 配置及应用
- Linux/Unix nfs配置
- Linux/Unix 硬件信息查看及管理
- Linux/Unix 优化
- Linux/Unix 交换分区Swap管理及应用
- Linux/Unix 用户管理
- Linux/Unix Ramdisk
- Linux/Unix 密码恢复管理
- Linux/Unix 文件删除恢复
- Linux/Unix fdisk分区
- Linux/Unix lvs负载均衡管理
- Linux/Unix root用户
- Linux/Unix 集群
- Linux/Unix 日志
- 更多Linux/Unix专题……