PE结构&导入表

本文深入探讨了PE文件格式中的导入表结构,包括其组成部分、工作原理及在内存中的表现形式。介绍了导入表如何帮助程序调用外部DLL文件中的函数,并解析了不同类型的链接方式及其优缺点。

PE体系

PE结构&整体叙述

PE结构&导入表

PE结构&导出表

PE结构&基址重定位表

PE结构&绑定导入实现

PE结构&延迟加载导入表

导入表简介

当我们源文件里面需要去如何画窗口,如何显示指定字符串这样功能的代码,只需要简单调用Windows API函数。这些调用的函数在源文件中并不存在。这些代码存储在DLL文件中,即动态链接库中。在动态链接库里存放的不是函数的源代码,而是编译链接后生成的字节码。
源程序调用了动态链接库的相关函数,在进行编译和链接的时候,编译程序和链接程序就会把调用的相关信息写入最终生成的PE文件中,从而来告诉操作系统这些函数的执行字节码能从哪里获取,这些信息就是导入表所要描述的内容

DLL加载方式有两种:显式链接(Explicit Linking) 和 隐式链接(Implicit Linking)

  1. 显示链接:程序在使用DLL时进行加载,使用完毕后释放内存
  2. 隐式链接:程序在开始时即一同加载DLL,程序终止时再释放占用的内存

IAT提供的机制与DLL的隐式链接有关。

优点:

  1. 不把函数库包含进应用程序中,单独组成DLL文件,在需要使用时再进行调用。
  2. 使用内存映射技术将加载后的DLL代码、资源在多个进程中实现共享。
  3. 在对函数库进行更新时,只更新DLL文件即可。

导入函数

当我们调用一个API时,这个API我们不可能自己手写,基础源码这些东西都不知道,所以直接导入头文件然后使用即可。

#include<iostream>
#include<Windows.h>
using namespace std;
int main() {
   
   
	LPCSTR text = "hello world";
	LPCSTR title = "第一个MessageBoxA";
	MessageBoxA(NULL, text, title, MB_OK);

}

关于API调用的汇编代码如下:

.text:00401516 mov     [ebp+text], offset aHelloWorld ; "hello world"
.text:0040151D mov     [ebp+title], offset unk_48800C
.text:00401524 mov     dword ptr [esp+0Ch]<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻梦&之璐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值