Debugging 使用WinDbg验证COM序列化数据包

Debugging 使用WinDbg验证COM序列化数据包,debugging,windbg,Debugging,Windbg,我试图在我的一个windows应用程序中使用WinDbg验证COM数据包结构(序列化数据包),该应用程序使用COM进行进程外通信 我知道GetHGlobalFromStream()函数的调用格式是这样的 在封送处理过程中,此调用成功后,rhglobal应指向指定流对象使用的当前内存句柄,并应指向序列化数据包(从MEOW头开始) 所以为了验证WinDbg,我做了这个 1. bp combase!GetHGlobalFromStream ; set break point at GetHGloba

我试图在我的一个windows应用程序中使用WinDbg验证COM数据包结构(序列化数据包),该应用程序使用COM进行进程外通信

我知道GetHGlobalFromStream()函数的调用格式是这样的

在封送处理过程中,此调用成功后,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_头的前几个字节“MEOW”。但我不这么认为


我做错什么了吗?如果这不是查看数据包的正确方式,我如何使用调试器来查看它?

您链接到的不是引用,而是一个示例,它似乎与您尝试执行的操作完全不同。api的Msdn reference对globalrealloc有一个警告,请查看是否发生了这种情况,您链接到的不是引用,但是一个示例所做的似乎与您尝试做的完全不同
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).