导出表位于数据目录表的第一个位置
导出表结构
AddressOfFunctions 地址表大小由NumberOfFunctions决定
AddressOfNameOrdinals AddressOfName序号表和名字表的大小由 NumberOfNames决定
1:
GetProcAddress 通过函数名找函数地址的方式。 先通过函数名在名称表里面找到匹配的函数名,然后通过匹配函数名的序数在序号表相应的序数位置找到里面存的值 ,取出序号+Base,最后通过真正的序号作为地址表的偏移找到地址;
base+序号表里面的值=真正导出的序号
2:
通过导出序号的方式找函数地址,用给的序号值减去base,然后在地址表里面直接找这个索引的地址(RVA);
以NONAME形式导出的序号=地址表里面的索引加上base NONAME在序号表里面没有匹配项(有匹配项一定是以名字导出的)
从图上可以看出,以名字导出的函数一共有10个,AddressOfNameOrdinals中的序号有10个.
以第一个函数名为例子:
第一个函数索引为0,在序号表中查找第0个元素,找出来的序号是3.然后再地址表中找到第三个成员(4字节) 就找到了函数的RVA地址.