美文网首页
程序员自我修养3-目标文件

程序员自我修养3-目标文件

作者: S_s_s_a53f | 来源:发表于2017-08-04 17:24 被阅读0次

可执行文件:在windows中为PE文件,在linux中为ELF文件

图片.png 图片.png

在linux下使用file命令查看相应的文件格式:

file foobar.o
file /bin/bash
file /lib/ld-2.5.1.so
图片.png

分析:
一般C 语言的编译后执行语句都编译成机器代码,保存在.text段;
已经初始化的全局变量和局部静态变量都保存在.data段;
未初始化的全局变量和局部静态变量放在.bss段。
只读数据段.rodata
注释信息段.comment
堆栈提示段.note.GNU-stack
.plt和.got:动态链接的跳转表和全局入口表
objdump -h 查看目标文件的结构和内容 或readelf

ELF中结构:

图片.png
objdump -s将所有段的内容以十六进制的方式打印出来
objdump -d将所有包含指令的段反汇编
objdump -x将文件内容更详细打印出来

ELF文件结构描述:

readelf -h查看文件头
ELF文件类型:

图片.png

查看ELF段表:

objdump -h 或readelf -S

查看ELF文件的符号表:

objdump -t/readelf
objdump/readelf/nm
如:nm a.o

举例分析各个符号在符号表中状态:

图片.png

第一列Num表示符号表数组的下标,第二列value就是符号值;第三列SIZE为符号大小,第四列和第五列分别为符号类型和绑定信息
,第七列表示该符号所属的段,最后一列是符号名称。
第一个符号永远是个未定义的符号。

特殊符号:

_executable_start:该符号为程序起始地址,不是入口地址,是程序的最开始的地址。
_etext或__etext\etext:代码段结束地址,即代码段最末尾的地址。
_edata或edata:该符号为数据段结束地址,即数据段最末尾的地址。
_end或end:为程序结束地址。

相关文章

  • 程序员自我修养3-目标文件

    可执行文件:在windows中为PE文件,在linux中为ELF文件 在linux下使用file命令查看相应的文件...

  • 程序员自我修养3:目标文件

    一、相同的文件格式:ELF 目标文件:代码编译后未链接的文件(Linux的.o) 可执行文件 静态链接库(Linu...

  • 程序员的自我修养

    程序员的自我修养:编译、链接、装载 问题 编译/链接的过程做了什么 目标/可执行文件的内容是什么 装载的过程做了什...

  • 书籍分享

    《程序员的自我修养》

  • 研读《程序员的自我修养—链接、装载与库》

    前言 仔细研读《程序员的自我修养—链接、装载与库》[https://www.amazon.cn/程序员的自我修养-...

  • 又超过限制

    1- 汗骚说的,程序员自我修养。 2- 创意,创新,创造力。 3-说到的事,一定做好。 4- 多思考,少慌张 5-...

  • 《程序员的自我修养》笔记1——目标文件

    一、前言 在一般的开发过程中,我们往往离不开 编译 这个操作。有时候遇到一些编译错误的时候,第一反应就是查找百度。...

  • 操作系统与编译面试题

    主要参考:《程序员的自我修养》读书总结编译与链接过程的思考linux 下动态链接实现原理研读《程序员的自我修养—链...

  • 收集经典的短句

    你可以不自己造轮子,但应该了解轮子的结构,而且越详尽越好,这就是程序员的自我修养吧。 ----《程序员的自我修养》...

  • fishhook 源码解析

    《程序员的自我修养-连接、装载与库》

网友评论

      本文标题:程序员自我修养3-目标文件

      本文链接:https://www.haomeiwen.com/subject/qifblxtx.html