PE结构-导出表

在上一篇博客中说了导入表,所谓的导入表,其实相当于记录程序所依赖的函数库信息,类似于你要调用外部函数,总得记录下这个函数在哪个库中,名字或者序号是什么。有了这些信息后,我们就可以LoadLibrary和GetProcAddress获取函数地址了

那么,操作系统是如何来获取函数地址呢,也就是GetProcAddress的实现,这里就涉及到了导出表。导出表,会记录这个库函数的地址是多少,所以简单来说GetProcAddress就是查导出表来获取地址,如何查就是下面的话题了。

导出意味着需要提供API给他人使用,一般来说会是一些DLL之类的,所以,我们先来写一个DLL,再来分析其PE格式

.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive

include windows.inc
include user32.inc
includelib user32.lib

public g_nTest
.data
	g_nTest dd 87654321h
	
.code

ShowMsg proc szText:LPSTR,szTitle:LPSTR
	invoke MessageBox,NULL,szText,szTitle,MB_OK
	ret
ShowMsg endp

MySub proc x:UINT,y:UINT
	mov eax,x
	sub eax,y
MySub endp

MyAdd proc x:UINT,y:UINT
	mov eax,x
	add eax,y
MyAdd endp

DllMain proc hinstDLL:HINSTANCE,fdwReason:DWORD,lpvReserved:LPVOID
	mov eax,TRUE
	ret
DllMain endp	
end DllMain

def文件描述

EXPORTS
	ShowMsg @11
	MySub @5 noname
	MyAdd @7
	g_nTest @8

这里我们先用Depends来观察一下导出情况

其中序号为5,7,8,9的就是我们自己导出的,那么剩余的是什么,下面就可以通过导入表来解释了

首先先来说一下如何定位到导入表,导入表位于数据目录的第一项

2060这里转FA的话就是660,所以文件地址从660开始,大小为77,这一整块是导入表信息的总大小,这里

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值