执行时不是特别清楚,先从静态的链接视图开始分析:
链接视图:
这几个就可以得到section的头部表格:
根据上面的section header里面的内容,得到:
,再结合IDA中的so。
section header将整个so文件分成了若干的section
里面可能比较重要的是 .dynstr .hash .plt .text .rodata .got
其中.text是代码段,程序执行的部分 .rodata是纯数据
.comment .not.gun.gold-ve .ARM.attributes .shstrtab,上面Addr地址为0x00000.因此不存放在内存中,在执行视图,或者IDA中不存在。但可以直接用010Edit查看。
链接视图,在实际执行中并不存在,因此ELF header中的关于segment的部分都可以修改。
执行视图:
根据ELF headers中的偏移,计算出program header的位置,以及数量和单个的长度。
根据program headers和section header的结合,得出:
复制网上一个图片:
得出
a. 一个节区可以同时属于多个段区b. 一个段区可以包含多个节区c. 段区由多个节区组成时,这些节区是连续的d. 我们看到.comments、.note.gnu.gold-ve、.ARM.attributes、.shstrtab 并没有被映射到段,因此可以猜测这些区间的内容修改不会影响程序的执行。
参考链接:
https://blog.csdn.net/jiangwei0910410003/article/details/49336613