我试图在我的一个Windows应用程序中使用WinDbg验证COM数据包结构(序列化数据包),该应用程序使用COM进行进程外通信。
我所知道GetHGlobalFromStream()函数的调用格式为Reference。
hr = ::GetHGlobalFromStream(pMarshalStream, &rhglobal);
在编组期间,此调用成功后 rhglobal 应指向指定流对象使用的当前内存句柄,它应指向序列化数据包(以MEOW标头开头)。
所以为了验证WinDbg,我做了这个
1. bp combase!GetHGlobalFromStream ; set break point at GetHGlobalFromStream
2. r $t1 = poi(esp+8); t1 is holding the address of rhglobal; 2nd arg.
3. db $t1; dump bytes at address t1 (rhglobal) before call completed.
4. gu; Step out of GetHGlobalFromStream() function
5. db $t1; Here we are back to callee; So we again tring to dump content of t1 (rhglobal).
但是在最后一行,我想我应该看到OBJ_HEADER的前几个字节" MEOW "。但我不明白。
我有什么不对的吗?如果它不是查看数据包的正确方法,我怎么能看到使用调试器?