能力值:
( LV5,RANK:60 )
|
-
-
2 楼
请问一下[00]vftable address = 是怎么获取的?
|
能力值:
( LV6,RANK:93 )
|
-
-
3 楼
[QUOTE=jiangjing;1168476]请问一下[00]vftable address = 是怎么获取的?[/QUOTE]
你说的是分析ATL/WTL窗口的结果吧?
如果是对话框,通过LONG_PTR winProc = ::GetWindowLongPtr(hWnd, DWLP_DLGPROC);
一般的窗口用LONG_PTR winProc = ::GetWindowLongPtr(hWnd, GWLP_WNDPROC);
得到的地址就是atl里的thunk数据,参考d:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include\atlstdthunk.h中的_stdcallthunk数据结构。主要包含窗口类的this指针和一个窗口回调过程
比如分析xspy自身:
----------获取ATL/WTL相关信息-------------
DWLP_DLGPROC address: 0x00596188 // 即::GetWindowLongPtr(hWnd, DWLP_DLGPROC);得到的结果
Dialog thunk address = 0x00596188 // thunk地址,即上面的值
class intstance = 0x0043F98C // 窗口类this指针
DialogProc= 0x001A96F0 // 回调函数
[00]vftable address = 0x001BB6BC // this地址头个成员就是虚函数表的指针
[vtbl+00]ProcessWindowMessage = 0x001A6640 // 虚函数表的第一个函数
GWLP_WNDPROC address: 0x75D2BB59 // 即::GetWindowLongPtr(hWnd, GWLP_WNDPROC);得到的结果
其中ProcessWindowMessage比较重要,所有消息都会经过这里。
ATL/WTL程序不像MFC程序那样,没有message map结构,因此读到的信息没有MFC多。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
神器自然要收藏了。
|
能力值:
( LV6,RANK:93 )
|
-
-
5 楼
自己顶。0.2版本发布。
CWnd和CDialog信息暂时只有mfc42和mfc90显示得出来,其他MFC版本因我机子只装了VS2008没法弄,只能显示到CCmdTarget的虚函数那层,如果你想帮忙,请随便创建一个MFC对话框工程,在C++命令行里加入/d1reportAllClassLayout,然后编译,把输出窗口里的那些信息复制发送到lynnux@qq.com,当然请注明vs版本,最好连编译好的MFC程序一起发送过来。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
非常不错的工具
|
能力值:
( LV9,RANK:170 )
|
-
-
7 楼
好东东!!顶一下!!!!!11
|
能力值:
(RANK:350 )
|
-
-
8 楼
有些可惜,为啥不同步更新一份呢?更新,还可以引些人气关注你的Blog.
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
很好的工具,感谢提供!
|
能力值:
( LV6,RANK:93 )
|
-
-
10 楼
顶个,已经开源
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
好东西,好东西。
|
能力值:
( LV13,RANK:1760 )
|
-
-
12 楼
留名
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
就是咯 为啥不同步更新呢?我发布的就一直更新呢
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
mark
|
能力值:
( LV10,RANK:171 )
|
-
-
15 楼
感谢!
|
|
|