| 下载本节例子程序和源代码 (4.43 KB) |
| 1、定位到 PE Header。 2、从数据目录读取引出表的虚拟地址。 3、定位引出表获取名字数目( NumberOfNames )。 4、并行遍历 AddressOfNames 和 AddressOfNameOrdinals 指向的数组匹配名字。如果在 AddressOfNames 指向的数组中找到匹配名字,就从 AddressOfNameOrdinals 指向的数组中提取索引值。例如,若发现匹配名字的 RVA 存放在 AddressOfNames 数组的第 12 个元素,那就提取 AddressOfNameOrdinals 数组的第 12 个元素作为索引值。如果遍历完 NumberOfNames 个元素,说明当前模块没有所要的名字。 5、从 AddressOfNameOrdinals 数组提取的数值作为 AddressOfFunctions 数组的索引。也就是说,如果值是 7 ,就必须读取 AddressOfFunctions 数组的第 7 个元素,此值就是所要函数的RVA。 |
| API’s Address = ( API’s Ordinal * 4 ) + AddressOfFunctions’ VA + Kernel32 imagebase |
老罗
2002-11-17