首页
社区
课程
招聘
[原创]调试器实现_导入函数断点
2009-9-9 21:28 5691

[原创]调试器实现_导入函数断点

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段里面)

其他小问题就多了,就不具体说了,在网上都有很多介绍。

[培训]《安卓高级研修班(网课)》月薪三万计划

收藏
点赞7
打赏
分享
最新回复 (4)
雪    币: 86
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xnop 2009-9-10 11:03
2
0
没人啊,,支持一下楼主
雪    币: 381
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lovehaohui 2009-9-10 16:01
3
0
顶,不错~,希望到时候可以分享您的调试器。。呵呵~
雪    币: 116
活跃值: (44)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
Tweek 5 2009-9-10 18:13
4
0
虽然功能都已经实现,但是 ,还是控制台程序,等我图形化后,我会分享的程序和代码的。
雪    币: 408
活跃值: (1875)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
riusksk 41 2009-9-10 23:13
5
0
楼主可以把之前的帖子整理成一篇文章,这样就可能加精了,也方便大到家学习
游客
登录 | 注册 方可回帖
返回