[编程实例]win32汇编语言调用dll结束进程[使用masmplus1.2]

  1. ;MASMPlus 代码模板 - 普通的 Windows 程序代码
  2. .386
  3. .Model Flat, StdCall
  4. Option Casemap :None
  5. Include windows.inc
  6. Include user32.inc
  7. Include kernel32.inc
  8. Include gdi32.inc
  9. includelib gdi32.lib
  10. IncludeLib user32.lib
  11. IncludeLib kernel32.lib
  12. include macro.asm
  13.     
  14.     WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
  15.     WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
  16.     E_Pro_KillProcessByName TYPEDEF PROTO :DWORD
  17.     lpKillProcessByName TYPEDEF  PTR E_Pro_KillProcessByName
  18. .DATA
  19.     szClassName db "MASMPlus_Class",0
  20.     dllname db "WinAPIExS.dll",0
  21.     fun db "E_Pro_KillProcessByName",0
  22.     procname db "Thunder5.exe",0
  23.     
  24. .DATA?
  25.     hInstance     dd ?
  26.     hDll          dd ?
  27.     
  28.     
  29.     
  30. .CODE
  31. START:
  32.     invoke GetModuleHandle,NULL
  33.     mov hInstance,eax
  34.     invoke WinMain,hInstance,NULL,NULL,SW_SHOWDEFAULT
  35.     invoke ExitProcess,0
  36. WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD
  37.     LOCAL wc   :WNDCLASSEX
  38.     LOCAL msg  :MSG
  39.     local hWnd :HWND
  40.     
  41.     mov wc.cbSize,sizeof WNDCLASSEX
  42.     mov wc.style,CS_HREDRAW or CS_VREDRAW or CS_BYTEALIGNWINDOW
  43.     mov wc.lpfnWndProc,offset WndProc
  44.     mov wc.cbClsExtra,NULL
  45.     mov wc.cbWndExtra,NULL
  46.     push hInst
  47.     pop wc.hInstance
  48.     mov wc.hbrBackground,COLOR_BTNFACE+1
  49.     mov wc.lpszMenuName,NULL
  50.     mov wc.lpszClassName,offset szClassName
  51.     invoke LoadIcon,hInst,100
  52.     mov wc.hIcon,eax
  53.     invoke LoadCursor,NULL,IDC_ARROW
  54.     mov wc.hCursor,eax
  55.     mov wc.hIconSm,0
  56.     invoke RegisterClassEx, ADDR wc
  57.     invoke CreateWindowEx,NULL,ADDR szClassName,CTXT("http://www.aogosoft.com"),WS_OVERLAPPEDWINDOW,200,200,400,200,NULL,NULL,hInst,NULL
  58.     mov hWnd,eax
  59.     invoke ShowWindow,hWnd,SW_SHOWNORMAL
  60.     invoke UpdateWindow,hWnd
  61.     
  62.     StartLoop:
  63.         invoke GetMessage,ADDR msg,NULL,0,0
  64.             cmp eax, 0
  65.             je ExitLoop
  66.                 invoke TranslateMessage, ADDR msg
  67.                 invoke DispatchMessage, ADDR msg
  68.             jmp StartLoop
  69.     ExitLoop:
  70.     
  71. mov eax,msg.wParam
  72. ret
  73. WinMain endp
  74. WndProc proc hWin:DWORD,uMsg:DWORD,wParam :DWORD,lParam :DWORD
  75.   local KillProcessByName :lpKillProcessByName
  76.     .if uMsg==WM_CREATE
  77.         
  78.     .elseif uMsg==WM_LBUTTONDOWN
  79.         
  80.         invoke LoadLibrary,ADDR dllname
  81.         mov hDll,eax
  82.         .if hDll!=0
  83.             invoke GetProcAddress,hDll,ADDR fun
  84.             mov KillProcessByName,lpKillProcessByName PTR eax
  85.             .if KillProcessByName!=0
  86.                 invoke KillProcessByName,ADDR procname
  87.             .endif
  88.           invoke FreeLibrary,hDll
  89.             
  90.         .endif
  91.         
  92.         
  93.     .elseif uMsg == WM_DESTROY
  94.         invoke PostQuitMessage,NULL
  95.     .else
  96.         invoke DefWindowProc,hWin,uMsg,wParam,lParam
  97.     .endif
  98.     ret
  99. WndProc endp
  100. END START

 

使用了外部dll,编译需要masmplus和WinAPIExS.dll

dll下载地址 http://www.x86asm.com/download/winapiex/WinAPIExV0004Release.rar

masmplus下载地址  http://www.aogosoft.com

几个心得体会:

 

怎么定义指针?
 {E_Pro_KillProcessByName TYPEDEF PROTO :DWORD}
 函数指针 lpKillProcessByName TYPEDEF  PTR E_Pro_KillProcessByName
怎么定义变量?
 hDll          dd  ?
 local KillProcessByName  :lpKillProcessByName
怎么声明函数?
 E_Pro_KillProcessByName TYPEDEF PROTO :DWORD
怎么赋值?
 mov KillProcessByName,lpKillProcessByName PTR eax
怎么进行函数调用?
 invoke GetProcAddress,hDll,ADDR fun
怎么进行类型转换?
 lpKillProcessByName PTR eax

 

 

自定义数据类型

//ABC TYPEDEF  PORTO  :DWORD  :DWORD 
将ABC定义为一个函数,他有2个Dword型的参数,便于Invoke伪指令使用。

//CC  TYPEDEF  PTR  ABC
将CC定义为一个指向ABC函数的指针

你可能感兴趣的:([编程实例]win32汇编语言调用dll结束进程[使用masmplus1.2])