一.首先看一个简单的程序: #include<stdlib.h> int main() { while(1) { sleep(1000); } return 0; } gcc -static SectionMapping.c -o SectionMapping.elf/usr/bin/ld: cannot find -lcyum install glibc-static 查看一下静态链接之后,SectionMapping.elf的段分布情况 readelf -S SectionMapping.…
1.地址空间 在linux系统中,每个进程拥有自己独立的虚拟地址空间,这个虚拟地址空间的大小是由计算机硬件决定的,具体地说,是由CPU的位数决定的.比如,32位硬件平台决定的虚拟地址空间大小:0--232-1.即0x00000000--0xFFFFFFFF. 在linux系统中,整个4GB内存空间被分成两部分.其中操作系统本身用去一部分,从地址0xC0000000到0xFFFFFFFF.剩下的低地址的0x00000000到0xBFFFFFFF的3GB虚拟空间由进程使用. 装载有两种方式--覆盖装…
一.首先对readelf常用的参数进行简单说明: readelf命令是Linux下的分析ELF文件的命令,这个命令在分析ELF文件格式时非常有用,下面以ELF格式可执行文件test为例详细介绍: 1.readelf -v       显示版本 2.readelf -h       显示帮助 3.readelf -a test           显示test的全部信息 4.readelf -h test           显示test的ELF Header的文件头信息(就是ELF文件开始的前5…
这块将介绍一下ld链接命令的具体使用.ld的作用:ld是GNU binutils工具集中的一个,是众多Linkers(链接器)的一种.完成的功能自然也就是链接器的基本功能:把各种目标文件和库文件链接起来,并重定向它们的数据,完成符号解析.链接其实主要就是完成四个方面的工作:storage allocation.symbol management.libraries.relocation.ld可以识别一种Linker command Language表示的linker scriopt文件来显式的控…
首先我们先看两段代码: a.c extern int shared; int main(){ int a=100; swap(&a,&shared); } b.c int shared=1; void swap(int* a,int* b){ *a^=*b^=*a^=*b; } gcc  -c a.c b.c 得到a.o 与b.o 1.查看a.o: [root@tlinux misc]# objdump -h a.o a.o: file format elf64-x86-64 Sectio…
一.首先看一下几个常用参数的基本含义: objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它还有其他作用,下面以ELF格式可执行文件test为例详细介绍: 1.objdump -f test       显示test的文件头信息 2.objdump -d test       反汇编test中的需要执行指令的那些section 3.objdump -D test       与-d类似,但反汇编test中的所有section 4.objdump -h test       显…
共享库从文件结构上来讲,与共享对象没什么区别.Linux下,共享库就是普通的ELF共享对象. 1.共享库命名: libname.so.x.y.z :其中最前面使用前缀lib,中间是库的名字和后缀"so".最后三个数字组成的是版本号.其中,"x"表示主版本号,"y"表示次版本号,"z"表示发布版本号. 2.SO-NAME: 共享库主版本号与次版本号决定了一个共享库的接口.对于Linux系统来说,普遍采用一种叫做SO-NAME的命…
1.dlopen是一个强大的库函数.该函数将打开一个动态库,并把它装入内存.该函数主要用来加载库中的符号,这些符号在编译的时候是不知道的.比如 Apache Web 服务器利用这个函数在运行过程中加载模块,这为它提供了额外的能力.一个配置文件控制了加载模块的过程.这种机制使得在系统中添加或者删除一个模块时,都 不需要重新编译了. 可以在自己的程序中使用 dlopen().dlopen() 在 dlfcn.h 中定义,并在 dl 库中实现.它需要两个参数:一个文件名和一个标志. 功能:打开一个动态…
nm命令(names):输出包含三个部分:1 符号值.默认显示十六进制,也可以指定: 2 符号类型.小写表示是本地符号,大写表示全局符号(external); 3 符号名称. 例如:nm SimpleSection.o 0000000000000000 T func1 0000000000000000 D global_init_var 0000000000000004 C global_uninit_var 0000000000000021 T main U printf 0000000000…
可以用readelf命令来查看elf文件内容,跟objdump相比,这个命令更详细. 1. readelf -h SimpleSection.o ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 45为E 4C为L 46为F Class: ELF64 Data: 2's complement, little endian Version: 1 (current) OS/ABI: UNIX - System V A…