ELF文件格式解析二

使用objdump命令查看elf文件

objdump -x 查看elf文件所有头部的信息
在这里插入图片描述
所有的elf文件。 程序头部(Program Header)中,都以 PT_PHDR和PT_INTERP先开始。这两个段必须在所有可加载段项目的前面。
从上图中的INTERP段中,可以看到改段从 0x318位置处开始加载,长度为0x1C。

我们使用 hexdump 命令查看elf文件的二进制内容。
在这里插入图片描述
找到0x318位置
在这里插入图片描述

6c2f 6269 3436 6c2f 2d64 696c 756e 2d78 3878 2d36 3436 732e 2e6f 0032
|/    bi  46    |/  - d   i |  un   -x   8 x  -6   4 6  s .  . o   2

通过比对ascii码,可以知道从0x318开始的28个二进制表示的
字符串是: /lib64/ld-linux-x86-64.so.2
在这里插入图片描述

/usr/lib/x86_64-linux-gnu/libc-2.31.so 应该是/usr/lib/x86_64-linux-gnu/ld-2.31.so加载的。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

参考视频: elf文件格式

#include<stdlib.h>
#include<stdio.h>

//#include "b.c"

int uninitiallized;
char* initialized = "I'm here";
int glb_arr[]={1,2,3,4};

int cmp(int a, int b){
	return a >= b ? a : b;
}

void main(){
	void * ptr = malloc(0x10);
	static int stc = 2;
	ptr = malloc(0x10);
	const int cst = 0xab;
	cmp(1,2);
	printf("end\n");
}

第一次调用到malloc函数时, 跳转到 malloc@plt, 然后跳转到malloc@got, 从got表得到偏移,从而跳转到偏移地址处,从而再去调用resolve函数获取malloc的绝对地址。

在这里插入图片描述

got表中, 最开始指向都是偏移地址,如下 puts@glt指向的偏移是 0x555555555036.
malloc@got指向的偏移是 0x555555555036.
在这里插入图片描述

调用resolve函数获取malloc的绝对地址,0x7ffff7e5e700. 并将该地址放到got表中。下次调用malloc直接用这个地址即可。不需要再次调用resolve函数获取地址。
puts@plt,malloc@plt都会调用resolve函数,因此,下图中的右上角的地址是一样的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值