作者存档
首先,我终于辞职了,大概8月底回南宁。最近一直活跃在腾讯微博,博客没啥可写的,WordPress 3.x已经发布1个多月了,可惜官方简体还是2.9.2,传说已经无人过问鸟,无奈只好升级了英文3.0.1,但愿没对各位访客造成什么障碍。
RtlCaptureContext可以用来获取调用者的线程环境结构CONTEXT,但有个很重要的前提,就是调用者必须是bp-based frame的函数,所谓的bp-based frame,就是指函数开头有push ebp/mov ebp, esp指令,如果调用者不是bp-based frame的,则RtlCaptureContext有可能产生0xC0000005异常而使程序退出,这取决于调用者的ebp值,看看RtlCaptureContext的实现就知道了: @RtlCaptureContext: push ebx mov ebx, dword ptr [esp+8] mov dword ptr [ebx+B0], eax mov dword ptr [ebx+AC], ecx mov dword ptr [ebx+A8], edx mov eax, dword ptr [esp] mov dword ptr [ebx+A4], eax mov dword ptr [ebx+A0], esi mov dword ptr [ebx+9C], edi jmp short @L00000001 mov edi, edi push ebx [...]
今天发现的,测试VS2010简中版存在此BUG。 // vcpkgsrv.exe无限循环崩溃测试 // // 把下面的代码粘贴到任意.h或者.cpp里, // 等VS2010分析完文件,vcpkgsrv.exe将会崩溃退出, // 然后VS2010会重新启动vcpkgsrv.exe,接着继续崩溃 class A { public: virtual void test() {} }; class B : public A { public: // 这里不小心少写了个void,然后vcpkgsrv.exe就崩溃了 virtual test() {} };
