如何获取Linux-gate.so.1动态库
来源:互联网 发布:c语言重要的库函数 编辑:程序博客网 时间:2024/04/27 07:12
前面“Linux应用程序Helloworld入门”已经提到在Linux下每个可执行文件都依赖于几个最为基本的动态库,其中一个就是linux-gate.so.1。
从上面ldd给出的结果可以看出,这个linux-gate.so.1动态库有一些异样,libc.so.6的实际动态库路径在/lib/tls/i686/cmov/libc.so.6,而ld-linux.so.2是在/lib/ld-linux.so.2。那么不禁要问一个问题linux-gate.so.1这个动态库的路径是什么,是文件系统中那个文件呢?其实这个文件是内核映射上去的,并非存在实际的动态库文件,对于这个具体问题我们后续再做详细分析,这里仅仅做如何获取linux-gate.so.1动态库的方法。
通常情况下,比如在SUSE10, suse11系统上,linux-gate.so.1被映射到ffffe000-fffff000这个高端内存段里面。此时将这段内存导出到文件比较简单,可以使用下面脚本,帮助各位导出:
- VDSO_FILE_NAME=linux-gate.dso
- cat /proc/self/maps|grep "vdso"
- VDSO_ADDR=`cat /proc/self/maps|grep "vdso" |awk -F '-' '{print $1 }'`
- echo "Current VDSO address is 0x$VDSO_ADDR"
- VDSO_BLOCK=`echo |awk '{print substr("'${VDSO_ADDR}'",1,5)}'`
- ((SKIP_BLOCKS=16#$VDSO_BLOCK))
- echo "We have $SKIP_BLOCKS blocks before VDSO library"
- echo "Ready to generate $VDSO_FILE_NAME from block $SKIP_BLOCKS"
- dd if=/proc/self/mem of=$VDSO_FILE_NAME bs=4096 skip=$SKIP_BLOCKS count=1
- echo "Generate $VDSO_FILE_NAME Done"
在suse系统上执行的结果:
- ~> ./cat_linux_gate_so.sh
- ffffe000-fffff000 ---p 00000000 00:00 0 [vdso]
- Current VDSO address is 0xffffe000
- We have 1048574 blocks before VDSO library
- Ready to generate linux-gate.dso from block 1048574
- 1+0 records in
- 1+0 records out
- 4096 bytes (4.1 kB) copied, 4.2e-05 seconds, 97.5 MB/s
- Generate linux-gate.dso Done
- ~> file -b linux-gate.dso
- ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), stripped
- ~> objdump -T linux-gate.dso
- linux-gate.dso: 文件格式 elf32-i386
- DYNAMIC SYMBOL TABLE:
- ffffe400 l d .text 00000000 .text
- ffffe478 l d .eh_frame_hdr 00000000 .eh_frame_hdr
- ffffe49c l d .eh_frame 00000000 .eh_frame
- ffffe620 l d .useless 00000000 .useless
- ffffe400 g DF .text 00000014 LINUX_2.5 __kernel_vsyscall
- 00000000 g DO *ABS* 00000000 LINUX_2.5 LINUX_2.5
- ffffe440 g DF .text 00000007 LINUX_2.5 __kernel_rt_sigreturn
- ffffe420 g DF .text 00000008 LINUX_2.5 __kernel_sigreturn
在Ubuntu 上情况比较复杂,在此也耽误了不少时间,因为ubuntu映射到的内存地址是不固定的,每个进程映射的位置都是不同的。
多次执行:
cat /proc/self/maps|grep "vdso"b7f47000-b7f48000 r-xp b7f47000 00:00 0 [vdso]
b7f5f000-b7f60000 r-xp b7f5f000 00:00 0 [vdso]
b7f54000-b7f55000 r-xp b7f54000 00:00 0 [vdso]
0 0
- 如何获取linux-gate.so.1动态库
- 如何获取Linux-gate.so.1动态库
- What is linux-gate.so.1?
- What is linux-gate.so.1?
- What is linux-gate.so.1?
- Linux-gate.so.1的含义?(What is linux-gate.so.1)
- linux-gate.so.1介绍补充(what is linux-gate.so.1?)
- what is linux-gate.so
- VDSO/linux-gate.so/sysenter
- Linux-gate.so技术细节
- ldd 中显示的 linux-gate.so.1引出的问题
- 如何编译.so动态库
- Linux 动态库 so 使用
- 动态库*.so制作-linux
- Linux查看动态库so
- linux调用.so动态库
- 链接linux 动态so库
- C++文件如何在linux下生成动态库So,以及如何使用这个动态库
- 安卓开发获取SDCard中某个目录下图片
- jenkins 第一节 认识jenkins
- go语言JSON处理
- Kafka入门经典教程
- Ranger-hbase-plugin-0.6.0安装
- 如何获取Linux-gate.so.1动态库
- BI的架构模型
- android基础知识-Vibrator(振动器) 使用
- Android ViewAnimation 使用详解
- Java原生线程池原理
- opera浏览器,free VPN工具
- 利用Memcache解决数据库高并发访问的瓶颈问题
- boost::spirit用法及EBNF表达式基础
- C++保存json文件(使用jsoncpp库)