⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 console.inc

📁 The final version of UPX scrambler and PE sources in Delphi and flat assembler.
💻 INC
字号:

; Console utils

struct _COORD
  x dw ?
  y dw ?
ends

struct SMALL_RECT
  Left	 dw ?
  Top	 dw ?
  Right  dw ?
  Bottom dw ?
ends

struct CONSOLE_CURSOR_INFO
  dwSize   dd ?
  bVisible dd ?
ends

struct CONSOLE_SCREEN_BUFFER_INFO
  dwSize	      _COORD
  dwCursorPosition    _COORD
  wAttributes	      dw ?
  srWindow	      SMALL_RECT
  dwMaximumWindowSize _COORD
ends

FOREGROUND_BLUE      = 0001h
FOREGROUND_GREEN     = 0002h
FOREGROUND_RED	     = 0004h
FOREGROUND_INTENSITY = 0008h
FOREGROUND_DEFAULT   = FOREGROUND_BLUE+FOREGROUND_GREEN+FOREGROUND_RED
BACKGROUND_BLUE      = 0010h
BACKGROUND_GREEN     = 0020h
BACKGROUND_RED	     = 0040h
BACKGROUND_INTENSITY = 0080h
BACKGROUND_DEFAULT   = 0000h

CHAR	equ BYTE
BOOL	equ DWORD
COORD	equ DWORD
LPVOID	equ DWORD
LPWORD	equ DWORD
LPDWORD equ DWORD
LPCTSTR equ DWORD

ln db 13,10

proc InitConsole,lpConsoleTitle:LPCTSTR
     local CCI:CONSOLE_CURSOR_INFO
     ;----------------------------
     invoke GetStdHandle,STD_INPUT_HANDLE
     mov [StdIn],eax
     invoke GetStdHandle,STD_OUTPUT_HANDLE
     mov [StdOut],eax
     invoke SetConsoleTitleA,[lpConsoleTitle]
     mov [CCI.dwSize],8
     mov [CCI.bVisible],1
     lea eax,[CCI]
     invoke SetConsoleCursorInfo,[StdOut],eax
     ret
endp

proc Read,lpBuff:LPCTSTR
     .if [lpBuff] <> 0
	 invoke ReadFile,[StdIn],[lpBuff],255,Dummy,0
	 invoke lstrlen,[lpBuff]
	 .if eax
	     invoke OemToCharBuff,[lpBuff],[lpBuff],eax
	 .endif
     .else
	 invoke ReadFile,[StdIn],0,0,Dummy,0
     .endif
     mov eax,[Dummy]
     ret
endp

proc Readln,lpBuff:LPCTSTR
     stdcall Read,[lpBuff]
     ret
endp

proc Write,lpText:LPCTSTR
     push ebx
     invoke lstrlenA,[lpText]
     .if eax
	 mov ebx,eax
	 invoke VirtualAlloc,0,eax,MEM_COMMIT,PAGE_READWRITE
	 .if eax
	     push eax
	     invoke CharToOemBuffA,[lpText],eax,ebx
	     invoke WriteFile,[StdOut],dword [esp+0Ch],ebx,Dummy,0
	     invoke VirtualFree,dword [esp+8],ebx,MEM_DECOMMIT
	     pop eax
	 .endif
     .endif
     pop ebx
     ret
endp

proc Writeln,lpText:LPCTSTR
     stdcall Write,[lpText]
     invoke WriteFile,[StdOut],ln,2,Dummy,0
     ret
endp

proc Filln,cChar:CHAR,nCount:DWORD
     call WhereXY
     mov edx,eax
     add edx,[nCount]
     push edx
     invoke FillConsoleOutputCharacterA,[StdOut],dword[cChar],[nCount],eax,Dummy
     call GotoXY
     invoke WriteFile,[StdOut],ln,2,Dummy,0
     ret
endp

proc WhereXY;:COORD
     invoke GetConsoleScreenBufferInfo,[StdOut],ScrBufInfo
     mov ax,[ScrBufInfo.dwCursorPosition.y]
     shl eax,16
     add ax,[ScrBufInfo.dwCursorPosition.x]
     ret
endp

proc GotoXY,XY:COORD
     invoke SetConsoleCursorPosition,[StdOut],[XY]
     ret
endp

proc GotoXYw,wX:WORD,wY:WORD
     mov ax,[wY]
     shl eax,16
     add ax,[wX]
     stdcall GotoXY,eax
     ret
endp

proc SetColor,wColor:WORD
     invoke SetConsoleTextAttribute,[StdOut],dword[wColor]
     ret
endp

proc GetColor;:WORD
     invoke GetConsoleScreenBufferInfo,[StdOut],ScrBufInfo
     movzx eax,[ScrBufInfo.wAttributes]
     ret
endp

proc ClrScr
     push ebx
     invoke GetConsoleScreenBufferInfo,[StdOut],ScrBufInfo
     movzx eax,[ScrBufInfo.dwSize.y]
     movzx ebx,[ScrBufInfo.dwSize.x]
     mul bx
     mov ebx,eax
     invoke FillConsoleOutputCharacter,[StdOut],#32,ebx,0,Dummy
     invoke FillConsoleOutputAttribute,[StdOut],dword[ScrBufInfo.wAttributes],ebx,0,Dummy
     stdcall GotoXY,0
     pop ebx
     ret
endp

proc ShowError,lpErrorMsg:LPCTSTR,dwErrorCode:DWORD
     local buffer[64]:CHAR
     call GetColor
     push eax
     stdcall SetColor,FOREGROUND_RED+FOREGROUND_INTENSITY
     lea eax,[buffer]
     push [dwErrorCode]
     call @f
     db 'ERROR [0x%0.4X]: ',0
     @@:
     push eax
     call [wsprintfA]
     stdcall Write,
     add esp,8
     stdcall SetColor,
     stdcall Writeln,[lpErrorMsg]
     ret
endp

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -