原创: S3cana 合天智汇
原创投稿活动:https://mp.weixin.qq.com/s/Nw2VDyvCpPt_GG5YKTQuUQ
ELF文件格式的相关知识是Linux下进行pwn以及reverse的基础,是二进制可执行文件的一种形式,下面我们通过一个ELF文件的生成,并结合其ELF文件结构分析一下一个二进制文件在系统中执行时与权限相关的一些ELF结构知识点。文章内容较为浅显,大佬可略过,文章有不足之处,也恳请批评指正。
ELF文件的生成
一个main.c的文件,在linux系统上,经过gcc编译后可以生成一个可以执行的文件,以hello.c为例
#includeint main(){printf("Hello World ");return 0;}
一个ELF的生成,最开始是在系统中编写的一个源文件,依次会经过预处理,编译,汇编,链接过程后,会生成一个ELF格式的可以执行的文件。我们往往通过gcc hello.c -o hello即可生成一个文件名为hello的可执行文件,该程序会输出Hello World。
![2ec15d0baee0d7e20d00d3d9d44db2e2.png](https://i-blog.csdnimg.cn/blog_migrate/b04fb40bfd25e983fe7c6a40e6fa023b.jpeg)
在如上中,我们通过gcc 一条命令将hello.c编译成能够执行的二进制文件,但在这一条命令中,同时包含了预处理,编译,汇编,链接的过程。下面分别来看这几个过程
预处理
主要是处理头文件,预编译主要是处理那些源代码中的以"#"开始的预编译指令,会删除注释
gcc -E hello.c -o hello.i
![614fc15c2b37b251077855d7925525c4.png](https://i-blog.csdnimg.cn/blog_migrate/0252357fec0b40b4ee9fa635b4424edb.jpeg)
编译
编译,经过编译后,可以生成.s的汇编文件
gcc -S hello.i -o hello.s
![399c56d5ccd13a27b7ae4758451cb20b.png](https://i-blog.csdnimg.cn/blog_migrate/6f6bf78cb87d31dc50c958743fa2fb3f.jpeg)
汇编