Peguei esses exemplos do compilador FASMW que vem com alguns exemplos (duh).
Aqui vai o código da DLL:
; DLL creation example
format PE GUI 4.0 DLL
entry DllEntryPoint
include 'win32a.inc'
section '.code' 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 discardable
Agora compile com o Fasm. E para usar a DLL use o seguinte programa:
format PE GUI 4.0
entry start
include 'win32a.inc'
section '.code' code readable executable
start:
invoke ShowLastError,HWND_DESKTOP
invoke ExitProcess,0
section '.idata' import data readable writeable
library kernel,'KERNEL32.DLL',\
errormsg,'ERRORMSG.DLL'
import kernel,\
ExitProcess,'ExitProcess'
import errormsg,\
ShowLastError,'ShowLastError'
Explicando:
O código da DLL cria uma função (ShowLastError) que consegue o último erro do aplicativo.
E o segundo, o programa, usa a função ShowLastError.
Breve estarei fazendo as minhas, heheh. Espero que consigam tirar proveito disso.
Tópico muito show "Sthealt"Entendendo as DLLs
Qualquer usuário de computador já ouviu a tradicional explicação dos analistas de suporte: "isso deve ser problema em alguma DLL". O que é, afinal, essa DLL que provoca tantos problemas?
DLLs (Dynamic Link Libraries, ou Bibliotecas de Vínculo Dinâmico) são arquivos que contém componentes de programas.
Quando os desenvolvedores criam um programa, eles não colocam todas as funções do programa em um arquivo só. Eles separam algumas delas e colocam em arquivos auxiliares. Desta forma, você passa a ter um EXE que contém o programa principal, e várias DLLs que contém rotinas utilizadas pelo programa principal.
Existem pelo menos dois grandes benefícios em criar programas dessa forma: o primeiro é que você pode compartilhar funções entre programas distintos. Por exemplo, a Microsoft pode disponibilizar uma função em um arquivo DLL que pode ser usada por vários programas, de empresas diferentes. O segundo benefício é que as atualizações das funções ficam mais fáceis, pois você pode apenas alterar uma DLL, sem precisar reinstalar todo o programa.
Site de todas os arquivos desaparecidos ou corrompidos com a extensão.dll
http://www.dll-files.com/ (http://www.dll-files.com/)
Outros arquivos
cx,dll,sys,vxd
http://www.windll.com/ (http://www.windll.com/)
Ótimo tópico. Stealth como sempre com seus códigos em ASM fabulosos =) parabéns.
Algum dia ainda quero chegar ao nível de assembly do Ricardo heheh, os códigos dele são fabulosos.
Ricardo é algum usuário do Fórum? :-\
Sim, sub-moderador da área de programação, veja esse tópico dele: http://www.darkers.com.br/smf/index.php ... g6303.html (http://www.darkers.com.br/smf/index.php/topic,1592.msg6303.html)
=]
É.. realmente os tópicos dele são espetaculares.