【笔记】pe导出表的address of names的rva地址转换为offset
本帖最后由 奋斗丶小Z 于 2016-6-15 10:14 编辑一周多的时间对照自己的代码,查找baidu,对照winhex打开的dll,一边看一边写,错了改,经过昨晚的写,再写,
今天中午还是写出来了。好高兴呀!
不难看出AddressOfNames;就是存放导出函数的一个数组RVA了。但是这里有一个小问题。导致我在这个问题上花了半天时间。
AddressOfNames;中存放的确实是一个RVA(相对地址),但是不是直接指向函数数组的,而是指向了一个存放地址的数组也就是一个DWORD数组,
这个数组的每一个元素存放一个导出函数的RVA.我们在学习pe时,在这里要经过两重转换,先把AddressOfNames这个va的值转换成offset,
再加上(DWORD)pFileBuffer的值,用一个指针DWORD* x指向这里,这才是把的函数rva地址取到了,在经过文件偏移的转换,才能把这个值当成函数的地址,
在用printf("FunNames : %s \n",(PBYTE)((DWORD)pFileBuffer + dwFob1)); 才能取到它的名字。
页:
[1]