60 lines
1.2 KiB
NASM
60 lines
1.2 KiB
NASM
|
|
; DLL creation example
|
|
|
|
format PE GUI 4.0 DLL
|
|
entry DllEntryPoint
|
|
|
|
include 'win32a.inc'
|
|
|
|
section '.text' code readable executable
|
|
|
|
proc DllEntryPoint hinstDLL,fdwReason,lpvReserved
|
|
mov eax,TRUE
|
|
ret
|
|
endp
|
|
|
|
; VOID ShowErrorMessage(HWND hWnd,DWORD dwError);
|
|
|
|
proc ShowErrorMessage hWnd,dwError
|
|
local lpBuffer:DWORD
|
|
lea eax,[lpBuffer]
|
|
invoke FormatMessage,FORMAT_MESSAGE_ALLOCATE_BUFFER+FORMAT_MESSAGE_FROM_SYSTEM,0,[dwError],LANG_NEUTRAL,eax,0,0
|
|
invoke MessageBox,[hWnd],[lpBuffer],NULL,MB_ICONERROR+MB_OK
|
|
invoke LocalFree,[lpBuffer]
|
|
ret
|
|
endp
|
|
|
|
; VOID ShowLastError(HWND hWnd);
|
|
|
|
proc ShowLastError hWnd
|
|
invoke GetLastError
|
|
stdcall ShowErrorMessage,[hWnd],eax
|
|
ret
|
|
endp
|
|
|
|
section '.idata' import data readable writeable
|
|
|
|
library kernel,'KERNEL32.DLL',\
|
|
user,'USER32.DLL'
|
|
|
|
import kernel,\
|
|
GetLastError,'GetLastError',\
|
|
SetLastError,'SetLastError',\
|
|
FormatMessage,'FormatMessageA',\
|
|
LocalFree,'LocalFree'
|
|
|
|
import user,\
|
|
MessageBox,'MessageBoxA'
|
|
|
|
section '.edata' export data readable
|
|
|
|
export 'ERRORMSG.DLL',\
|
|
ShowErrorMessage,'ShowErrorMessage',\
|
|
ShowLastError,'ShowLastError'
|
|
|
|
section '.reloc' fixups data readable discardable
|
|
|
|
if $=$$
|
|
dd 0,8 ; if there are no fixups, generate dummy entry
|
|
end if
|