做好人难

看了姜文的新片子--让子弹飞,片子有点血腥,但通片让人相当痛快,除霸安良,劫富济贫,很有武侠的范!硬碰硬,枪对枪,谁怕谁!

所以流氓不可怕,但怕的是流氓有文化! 老六为了只值一个铜板的“公平”不得不划开肚肠,让我想起了河南小伙张海超,就为了驳斥权威部门做出的“肺结核”诊断,不得不开胸验肺!

当有文化的流氓一会“硬”一会“软”地耍流氓的时候,善良的人除了自残、自裁、自焚还能干什么?(去幼儿园可不是善良的人该办的事,要不自宫以明志,可否?)

所以,想做个好人,无论是兵荒马乱还是盛世太平,没有枪还真不行!“枪”是什么?“枪”就是让流氓怕咱们的东西!

朋友,你有枪吗?那,你会造吗?

Continue reading » · Rating: · Written on: 12-28-10 · No Comments »

用Windbg替代VSJitDebugger

习惯了Windbg,准备用Windbg替代Vistual Studio的VSJitDebugger.exe来做Postmortem Debugger。但尝试了下面两种办法都没有成功:

  1. 1, Windbg –I (设Windbg为默认的debugger应对Unhandled User Mode Exceptions)
  2. 2, 直接改注册表:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug]

直到在http://msdn.microsoft.com/en-us/library/ff542967.aspx里才看到,64位系统里对64位和32位程序有不同的设置:

1, A failing 64-bit application will be debugged according to the settings stored in the \\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug key.

2, A failing 32-bit application will be debugged according to the settings stored in the \\HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug key. However, if the Debugger value in this key specifies an application in the %windir%\system32 directory, Windows will look in %windir%\syswow64 instead.

  • 将两处的AeDebug都设成Windbg后,分别对64位和32程序进行测试,Windbg被加载并成功attach到问题进程上。

  • D:\Documents> type AeDebug-Windbg.reg

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug]
    "UserDebuggerHotKey"=dword:00000000
    "Debugger"="\"C:\\Program Files\\Debugging Tools for Windows (x64)\\windbg.exe\" -p %ld -e %ld -g"
    "Auto"="1"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\AutoExclusionList]
    "DWM.exe"=dword:00000001


    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug]
    "UserDebuggerHotKey"=dword:00000000
    "Debugger"="\"C:\\Program Files\\Debugging Tools for Windows (x64)\\windbg.exe\" -p %ld -e %ld -g"
    "Auto"="1"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug\AutoExclusionList]
    "DWM.exe"=dword:00000001

    Continue reading » · Rating: · Written on: 12-14-10 · 1 Comment »

    IE8 下载即崩溃

    这几天Green Browser一直不老实工作,只要我点下载或另存文件就异常退出,升级成最新版本问题也没能解决。然后检查IE8,同样会出异常退出,看来是IE8的问题。

    先禁掉可疑add-on插件,问题照旧,还是不能下载任何文件。启动IE8 w/o add-on模式,问题还是存在,这下快轮到我崩溃了。

    调用Visutal Studio分析,发现问题在Wpc.dll模块中,stack trace如下:

         Wpc.dll!WPCSecurity::CheckSID()  + 0x1d bytes   
         Wpc.dll!CWpcSettings::Initialize()  + 0x11 bytes   
         Wpc.dll!CWebSettings::Initialize()  + 0x3a bytes   
         Wpc.dll!CWindowsParentalControls::GetWebSettings()  + 0x68 bytes   
    >    ieframe.dll!InitWPCSettings()  + 0xeb bytes   
         ieframe.dll!CheckFileDownloadSettings()  + 0x26 bytes   
         ieframe.dll!CDocObjectHost::CDOHBindStatusCallback::_ProcessCONTENTDISPOSITIONBindStatus()  + 0x11d bytes   
         ieframe.dll!CDocObjectHost::CDOHBindStatusCallback::_ProcessSecurityBindStatus()  + 0x7a6f0 bytes   
         ieframe.dll!CDocObjectHost::CDOHBindStatusCallback::OnProgress()  - 0x15 bytes   
         urlmon.dll!CBSCHolder::OnProgress()  + 0x40 bytes   
         urlmon.dll!CBinding::CallOnProgress()  + 0x31 bytes   
         urlmon.dll!CBinding::OnTransNotification()  + 0xfb50 bytes   
         urlmon.dll!CBinding::ReportProgress()  + 0x2c bytes   
         urlmon.dll!COInetProt::ReportProgress()  + 0x58 bytes   
         urlmon.dll!CTransaction::DispatchReport()  - 0xa bytes   
         urlmon.dll!CTransaction::DispatchPacket()  + 0x31 bytes   
         urlmon.dll!CTransaction::OnINetCallback()  + 0x83 bytes   
         urlmon.dll!TransactionWndProc()  + 0x28 bytes   
         user32.dll!_InternalCallWinProc@20()  + 0x23 bytes   
         user32.dll!_UserCallWinProcCheckWow@32()  + 0xd3 bytes   
         user32.dll!_DispatchMessageWorker@8()  + 0xee bytes   
         user32.dll!_DispatchMessageW@4()  + 0xf bytes   
         ieframe.dll!CTabWindow::_TabWindowThreadProc()  - 0x32182 bytes   
         ieframe.dll!LCIETab_ThreadProc()  + 0x4433 bytes   
         iertutil.dll!CIsoScope::RegisterThread()  - 0x3227 bytes   
         kernel32.dll!@BaseThreadInitThunk@12()  + 0xe bytes   
         ntdll.dll!___RtlUserThreadStart@8()  + 0x23 bytes   
         ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes   

    ieframe.dll!InitWPCSettings() 尝试加载Wpc.dll,然后在Wpc中发生异常。Wpc.dll是处理Parental Controls的模块,对此了解不多,网上也没有多少介绍。

    先找到我上次做的系统备份,是一个月前做的,竟然没找到这个文件,于是揣测是近期新装的程序或Windows update安装的。但到底是什么软件还很难去定位。

    c:\Windows\SysWOW64>dir Wpc.dll
    2009/07/14  09:16           308,736 Wpc.dll
    c:\Windows\SysWOW64>dumpbin /headers wpc.dll |grep version
                9.00 linker version
                6.01 operating system version
                6.01 image version
                6.01 subsystem version
                   0 Win32 version

    查看PE文件头,OS竟是6.1,资源中的版本号是1.0.0.1。这里要注意一点:Windows 6.1是Windows 7,Microsoft比较搞笑。我当前的系统是Windows Server 2008 AMD64,是Windows 6.0,就试着用另一台Visata AMD64的Wpc.dll替代这个,结果竟然正常运行。看来IE8 crash是这个Wpc.dll的问题。

    再检查一下Vista系统的Wpc.dll

    C:\Windows\SysWOW64>dir Wpc.dll
    2008/01/21  10:51           296,960 Wpc.dll
    C:\Windows\SysWOW64>dumpbin /headers Wpc.dll | grep -i version
    Microsoft (R) COFF/PE Dumper Version 9.00.30729.01
                8.00 linker version
                6.00 operating system version
                6.00 image version
                6.00 subsystem version
                   0 Win32 version

    Vista系统的Wpc.dll资源中的版本号也是1.0.0.1。看来二者是用同一source code分别针对Vista和Win7做的不同的编译。

    同时将本系统的64位Wpc.dll恢复成Vista系统的,至此Green Browser/IE8下载又正常工作了。

    Continue reading » · Rating: · Written on: 12-13-10 · 1 Comment »

    国家之大,竞容不下一个蛋

    egg_house_in_china

    曾受到全国人民关注的蛋形小屋消失了!就在此前城管称蛋形小屋系私搭乱建应自行拆除!

    堂堂人民共和国容得下“老爸是李刚”这样的败类儿子,容得下贪污20亿的黑心官员,却容不下这样一个蛋!

    Continue reading » · Rating: · Written on: 12-13-10 · No Comments »

    CMD shell窗口是可以更宽的

    今天刚发现原来Windows的 CMD(cmd.exe) 窗口可以调宽度的,对常使用vi看代码或用mutt读邮件的人来是个相当好的消息。打开CMD窗口属性,修改Layout里Windows Size的Width即可。

    make-cmd-window-wider

    我虽是个Windows平台上的程序员,除Vistual Studio外,Cygwin和WinDDK也同样是必备工具,差不多天天都会用到。但在CMD窗口下用vi和mutt的体验并不怎么好,特别是看Windows代码,80字节宽的窗口限制让代码看来起很乱,所以我一般会用gvim。

    现在可以在CMD窗口里用vim –On分屏打开两件文件了。

    Continue reading » · Rating: · Written on: 12-10-10 · No Comments »

    用WinDDK环境build MFC程序

    WinDDK的source/makefile编译支持batch command方式,相当方便。实际上用它来编译MFC程序也是可能的。但要注意一点:对使用UNICODE程序,要设置USE_MFCUNICODE=1,不是USE_MFC=1。用错地话link会搞错入口函数,你的程序运行时就会报Access Violation.

    庞大的Visual Studio Ide环境或SDK程序包可以不用在安装了。

    Z:> type .../test/sources TARGETNAME=test TARGETPATH=obj TARGETTYPE=PROGRAM

    SOURCES= test.cpp test.rc

    C_DEFINES=$(C_DEFINES) -D_UNICODE -D_AFXDLL INCLUDES=.;..\sys\;$(DDK_INC_PATH);$(SDK_INC_PATH);$(MFC_INC_PATH);$(INCLUDES)

    TARGETLIBS=$(DDK_LIB_PATH)\user32.lib \ $(DDK_LIB_PATH)\kernel32.lib \ $(DDK_LIB_PATH)\comctl32.lib \ $(DDK_LIB_PATH)\ws2_32.lib

    USE_MFCUNICODE=1 PRECOMPILED_CXX=1 PRECOMPILED_INCLUDE=stdafx.h

    Continue reading » · Rating: · Written on: 12-06-10 · No Comments »