mytls.asm
上传用户:haohao_zhu
上传日期:2014-08-15
资源大小:2446k
文件大小:3k
源码类别:

PlugIns编程

开发平台:

Visual C++

  1. .386
  2. .model flat, stdcall
  3. option casemap:none
  4. include       masm32includewindows.inc
  5. include       masm32includekernel32.inc
  6. includelib    masm32libkernel32.lib
  7. includelib    kernl.lib
  8. include       masm32includeuser32.inc
  9. includelib    masm32libuser32.lib
  10. ; the code below is  copied and modified  a little from elicz's tlsinasm :) 
  11. ; you can get the original from his site 
  12. ; www.anticracking.sk/EliCZ/ which shows 
  13. ; lot more including a dll and thread 
  14. ; the original exe taken for example is iczelions tut02 aka MessageBox tutorial 
  15. .CONST
  16. _tls_array EQU    2CH      ;FS:[2CH] - pointer to array of pointers to copied tls blocks
  17. .DATA?
  18. _tls_index DWORD  ?
  19. ;pro forma create section with name .tls
  20. ;(but tls can be placed anywhere)
  21.    OPTION         DOTNAME
  22. .tls   SEGMENT
  23. _tls_start LABEL  DWORD
  24.  DWORD     80H    DUP ("slt.") 
  25. _tls_end   LABEL  DWORD
  26. .tls   ENDS
  27.    OPTION         NODOTNAME
  28. .DATA
  29. __xl_a DWORD TlsCallBack0 , TlsCallBack1
  30. __xl_z DWORD 0    ;null terminated list of pointers to callback procedures
  31. MsgCaption      db "Iczelion's tutorial no.2",0
  32. MsgBoxText      db "Win32 Assembly is Great!",0
  33. TLS_DIRECTORY    STRUCT
  34.  lpTlsDataStart LPDWORD ? ;copy block starting here
  35.  lpTlsDataEnd   LPDWORD ? ;and ending here + block (size=ZeroFillSize) filled with 0 to
  36.  lpTlsIndex     LPDWORD ? ;DS:[FS:[2CH]]+TlsIndex*4
  37.  lpTlsCallbacks LPDWORD ? ;pointer to 0 terminated array of pointers to callbacks
  38.  ZeroFillSize     DWORD ? ;overall size=lpTlsDataEnd-lpTlsDataStart+ZeroFillSize
  39.  Characteristic   DWORD ? ;reserved
  40. TLS_DIRECTORY      ENDS
  41. PUBLIC _tls_used ;this name is required and must be PUBLIC!!!!
  42. _tls_used TLS_DIRECTORY <_tls_start, _tls_end, _tls_index, __xl_a, 0, ?>
  43. Messagebox PROTO
  44. Thread PROTO 
  45. .code
  46. start:
  47.     INVOKE  CreateThread, NULL, NULL, OFFSET Thread, ESP, NULL, ESP
  48.     push eax
  49.    invoke WaitForSingleObject ,eax,INFINITE
  50.     POP     EAX
  51.    INVOKE  CloseHandle, EAX
  52.    
  53.       invoke MessageBox, NULL,addr MsgBoxText, addr MsgCaption, MB_OK
  54. invoke ExitProcess,NULL
  55.    
  56. Thread    PROC 
  57.    RET
  58.  Thread    ENDP
  59. .code mysection
  60. TlsCallBack0   PROC    hinstImg, fdwReason, lpvReserved
  61.    invoke IsDebuggerPresent
  62.    .if eax == 1
  63.    invoke Messagebox
  64.    .endif
  65.     
  66.    MOV     EAX, TRUE
  67.    RET
  68.  TlsCallBack0   ENDP
  69. TlsCallBack1   PROC    hinstImg, fdwReason, lpvReserved
  70.    invoke IsDebuggerPresent
  71.    .if eax == 1
  72.    invoke Messagebox
  73.    .endif
  74.     
  75.    MOV     EAX, TRUE
  76.    RET
  77.  TlsCallBack1   ENDP
  78. end start