在读了看雪精华8里面的文章《Reversing MS VC++ Part II: Classes, Methods and RTTI》后有一些不太明白的地方
在这里向各位老师请教一下。在上面提到的文章中说了MSVC对于类的数据的组织形式,此后我用IDA反编译了使用MFC
生成的EXE文件,发现在这个文件中的.rdata段找到了类似虚函数表的的数据。假设该表就是虚函数表的话,但是
在这个虚函数表之前还有一部分数据如下面所示。前面这段数据第一部分好像是该类的message_entry和message_map,
紧跟后面的是一个指针,这个指针是指向什么数据呢?
.rdata:0041C850 stru_41C850 MFC_MessageMap <40124Ah, 41C858h> ; DATA XREF: sub_401083o
.rdata:0041C858 dd 0
.rdata:0041C85C dd 0
.rdata:0041C860 dd 0
.rdata:0041C864 dd 0
.rdata:0041C868 dd 0
.rdata:0041C86C dd 0
.rdata:0041C870 dd offset dword_41EB38 ;这个指针应该是指向什么数据?
.rdata:0041C874 off_41C874 dd offset CWnd::GetRuntimeClass(void)
.rdata:0041C874 ; DATA XREF: sub_401000+25o
.rdata:0041C874 ; sub_40105A+Eo
.rdata:0041C878 dd offset sub_40103E ; 虚函数表的开始
.rdata:0041C87C dd offset nullsub_4
.rdata:0041C880 dd offset nullsub_5
.rdata:0041C884 dd offset nullsub_4
.rdata:0041C888 dd offset CCmdTarget::OnCmdMsg(uint,int,void *,AFX_CMDHANDLERINFO *)
.rdata:0041C88C dd offset CWnd::OnFinalRelease(void)
.rdata:0041C890 dd offset CCmdTarget::IsInvokeAllowed(long)
.rdata:0041C894 dd offset CCmdTarget::GetDispatchIID(_GUID *)
.rdata:0041C898 dd offset CCmdTarget::GetTypeInfoCount(void)
.rdata:0041C89C dd offset CCmdTarget::GetTypeLibCache(void)
.rdata:0041C8A0 dd offset CCmdTarget::GetTypeLib(ulong,ITypeLib * *)
.rdata:0041C8A4 dd offset sub_401083
还有一个问题就是该段是.rdata只有读许可,而且没有发现类的成员变量和虚函数表指针。
想问一下该如何找到一个类的信息的存储部位?如何判断该类是什么类?
[课程]FART 脱壳王!加量不加价!FART作者讲授!