-
-
[原创]调试器实现_导入函数断点
-
2009-9-9 21:28
5691
-
导入函数断点:
实现原理和OD好像是一样的(
):
struct Im_F{
DWORD DataAddress; //address in .text
DWORD IdataAddress; //address in .idata
std::string NameOfDll; //name of dll
std::string NameOfFunc; //name of fucntion
}ImportInfo;
在对pe结构分析的时候,获取导入函数的地址以及名字。保存在上面的结构体数组里面。
在反汇编的时候,获取FF15开头的指令对应的地址(代码段里面的地址)和被调地址(这个不一定是导入表的函数),然后通过pe分析得到的导入表的地址范围判断被调地址是否是导入函数,然后将地址保存在一个结构体数组里面。
具体的问题很多,大概说下比较烦的问题。
1,在获取导入函数名的时候,由于我是镜像到内存,所以用了ImageRvaToVa得到镜像里面的函数名位置,但是,获取导入函数的地址的时候,就不是ImageRvaToVa转换过后的地址,而是原来pe文件里面给出的RVA。
2,导入函数的地址(在pe加载器加载到内存时候对应的地址)并不是IMAGE_IMPORT_BY_NAME结构的地址,而是FirstThunk指向的IMAGE_THUNK_DATA的地址加上对应偏移量(当然,它也是在.idata段里面)
其他小问题就多了,就不具体说了,在网上都有很多介绍。
[培训]《安卓高级研修班(网课)》月薪三万计划