<<程序员自我修有-链接,转载库>>读书笔记之Linux目标文件调试说明
来源:互联网 发布:海鼎软件 编辑:程序博客网 时间:2024/05/29 18:47
1,OBJ文件的概念:
ELF文件格式(可重定向文件(obj),可执行文件,共享文件(so),核心存储文件(core dump file)),use command "file" to show
the file's information.
ELF header,text section 放代码段,data section:全局赋值变量 , bss:局部静态,未定义。... Symbol table
debug command: 与tool-chain有关系1) objdump[-h,-d,-s,-x] nm{查看文件中有多少函数,-l 可以查案具体属于哪个文件中}
OS linux:2) size 3) readelf [-h,-s]
GCC attribute use: http://gong301.blog.163.com/blog/static/18388590720117215204552/
GCC build command :-g{show debug info} -strip{decrease debug info}
每个目标文件,其因为没有分配虚拟地址,都是互相独立,从0x00000000
2, OBJ之间的静态链接
build command:ld -static
link static library:-l[lib name]
GCC compiler:use "-verbose"可以将整个编译链接过程中间步骤打印出来。
debug command: 查看lib库是由哪几个.o组成,可以使用ar{tool-chain有关系}【-t/-x】来查看。
objdump/nm/readelf是可以作用所有elf文件格式。
缺陷:其因为这个文件中包含所有.o的一份copy,size上会比较大。如果lib中的一个.o修改了,那么就需要
更新整个lib,这样子维护都比较麻烦。因为其生成lib之后就很容易确定他在虚拟地址的空间,所以很容易定位。
3,OBJ之间的动态链接
概念:该lib库可以指出需要使用的.o,在运行的时候采取链接载入。具有了一定灵活性,且修改.o只需要更新
该.o就可以。不同的lib可以共享同一个o文件。
地址空间:因为不知道他真正地址,转载时候才知道,所以其地址是从0x00000000开始。
不同进程使用同一共享库:其会将该共享库copy一份到进程地址空间,所以最原始的共享库中断数据量并没有改变,
修改的只是该so的一份备份,所以如果so中有全局变量,这个时候不同进程并不会同时影响这个全局变量,只是影响
该so的备份中的全局变量。 所以,进程之间如果要共享so中全局变量,必须时候特别的共享方式。
4, 程序的装载
一个执行程序需要运行,那么就需要将其载入到memory中去执行相关性的机器指令集。
1 ) 查看进程中每个process中各个库使用VM的情况:cat /proc/${PID}/maps .
2 ) 使用了虚拟地址空间,采用的是分页映射机制载入。
3 )其实装载过程就是去动态运行可执行文件,也可以理解为进程的运行,那么让一进程工作,需要做什么:
step1,为进程创建一个独立的虚拟地址空间。
step2,读取装载的可执行文件头,并且建立虚拟地址空间与可执行文件的映射关系。
step3,将CPU指令就成年期设定为可执行文件的入口地址,启动运行。
因此,一个进程只有一个路口地址(表现为main)。
http://mqzhuang.iteye.com/blog/901602【process 虚拟内存分布】
- <<程序员自我修有-链接,转载库>>读书笔记之Linux目标文件调试说明
- <<程序员自我修有-链接,转载库>>读书笔记之Linux 库
- 《程序员的自我修养——链接、装在与库》第三章《目标文件里有什么》读书笔记
- 《程序员的自我修养》读书笔记2 -- ELF目标文件和静态链接和装载
- 读书笔记之《程序员的自我修养--链接、装载与库》
- 读书笔记之《程序员的自我修养--链接、装载与库》
- 读书笔记——《程序员自我修养》——目标文件
- 程序员的自我修养<3.目标文件有什么>
- 《程序员的自我修养--链接、装载与库》读书笔记之基础篇
- 读书笔记之《程序员的自我修养——链接、装载与库》
- 学习程序员的自我修养之目标文件
- 《程序员的自我修养--链接、装载与库》--读书笔记
- 程序员的自我修养读书笔记——目标文件的格式总结
- 目标文件有什么读书笔记
- 程序员自我修养-目标文件的结构
- 程序员的自我修养 ch3 目标文件
- 程序员的自我修养:(1)目标文件
- 【程序员的自我修养】第3章 目标文件里有什么?
- Nutch2 之 InjectorJob
- IOS自定义键盘
- 清华2006年复试上机题:二叉树遍历
- C++重载自增和自减操作符
- Oracle导入导出的sql语句
- <<程序员自我修有-链接,转载库>>读书笔记之Linux目标文件调试说明
- Android 使用Parcelable序列化对象
- 次世代光照体验
- RSA算法
- 在eclipse下手动配置ssh的环境,Spring,Struts2,Hibernate
- 集群概念
- How to see index usage (without "alter index ... monitoring usage")
- Apache Mahout基于商品的协同过滤算法流程分析
- Map put 使用