导入表与导出表(1)
发布网友
发布时间:2023-06-15 02:06
我来回答
共1个回答
热心网友
时间:2024-12-06 06:38
首先说几个基本问题:
1.导入表的作用是什么?没有它exe能运行么?
作用:记录了一个exe或者一个dll所用到的其他模块导出的函数;
所记录的信息有:用了哪些模块(用了哪些dll),用了dll的哪些函数
2.导出表的作用?没有它exe能运行么?
作用:记录了导出符号的地址,名称,与序号
(提示:exe文件中很少有导出表的,大多数dll都有导出表,某些存放资源文件的dll就没有导出表)
下面截取自笔记,便于理解导入表与导出表的关系:
3.怎样才能知道一个exe用了哪些API?
通过遍历导入表就可以知道导入了哪些dll以及dll中的哪些API
4.已知一个dll名和dll导出函数的名字,如何得到这个函数名的地址
通过Loadlibrary(GetModelHandle)将dll模块映射进内存并返回一个可以被GetProcAddress函数使用的句柄,再利用GetProcAddress得到dll的加载地址,通过遍历导出表就可以得到该函数的地址.
5.如何判断导入函数是以序号导入还是以名称导入?
在IMAGE_THUNK_DATA32这个结构体(结构体里面就是一个联合体,大小为32位)里面,判断结构体字段中的最高位,
最高位为1:以序号导入
最高位为0:以名称导入
6.怎样才能知道导出函数是以序号导出还是以名称导出?
遍历序号表,判断地址表的下标有没有存在与序号表中,存在就说明是以名称导出,不存在就说明是以序号导出
导入表几个简图(笔记中的,将就看吧):
解析导入表:
另外一种方式;