eu lembro de ter feito um tutorial ensinando a criar e carregar dll em pascal agora vamos ver como faz isso em c, as dll sao arquivos q sao carregados em tempo de execuçao de determinado programa ou codigo elas sao um tipo especial de executavel q permite exporta funçoes uma das vantagem das dll q o codigo principal do programa fica menor e ate mais rapido dependendo do caso, outra vantagem q dll criada em uma linguagem pode ser executada em outra linguagem no caso se vc criar uma dll em c pode usar ela em pascal ou outra linguagem q permite carregar ela, a grande desvantagem q o programa vai ficar dependendo daquela dll caso ela falte o programa vai dar erro (se vc analisar boa parte da biblioteca de funçoes da linguagem vc vai perceber q boa parte dela estao em dll no sistema principalmente a biblioteca windows.h e outras q ela carrega), eu poderia ficar alguns minutos a mais escrevendo das vantagem e desvantagem da dll mais to meio bebado pra isso entao vou logo ensinar antes q alcool começa fazer efeito e eu esqueço q eu ia escrever XD, para criar dll agente vai ter q declarar a biblioteca windows.h depois criar 3 variaveis do tipo HINSTANCE, DWORD, LPVOID eu chamei as variaveis de hin, dw, lpv
so lembrando q aq agente nao vai usar a funçao principal main, no lugar dela vai ser DllMain como retorno vai ser BOOL APIENTRY e como argumento nossas 3 variaveis, agente vai ter q retorna TRUE tambem
a estrutra da nossa dll ta pronta agora so coloca o prototipo da funçao e depois a funçao depois do DllMain, no prototipo agente tem q especificar _declspec(dllexport) antes do tipo, no caso aq eu vou criar uma funçao chamada fts_soma q vai retorna um tipo inteiro e vai ter como argumento duas entradas inteiras e vai retorna a soma das duas variaveis
para compilar tem linkar -Wall e -shared no caso eu to compilado pelo prompt entao ficaria algo assim
pronto vai gerar nossa dll, agora vamos aprender como carregar ela porem existe varias maneiras para isso mais so vou ensinar uma, para começar temos q declarar a biblioteca windows.h depois criar uma especie de prototipo usando typedef da funçao no caso a funçao q agente vai usar na dll vai ter um retorno tipo int e vai ter duas entrada tipo int e tambem declaramos esse tipo
agora criamos uma variavel do tipo HINSTANCE q no meu caso eu chamei de dll, ela vai servir para receber a dll carregada, vamos usar a funçao LoadLibrary e passar como argumento a nossa dll e depois atribuir ela a nossa variavel, tambem usamos a funçao FreeLibrary para liberar ela passamos como argumento nossa varivel q recebeu a dll
antes da gente liberar a dll, agente usa nosso tipo q declaramos (no meu caso e o f) recebendo a funçao GetProcAddress, passamos como argumento a variavel q recebeu a dll e o nome da funçao q agente vai usar (a funçao dentro da dll q e fts_soma) , tambem temos q usar typecast para converter para o tipo (no meu caso e fun)
agora o tipo viro a propria funçao toda vez q agente usar o f vai ser equivalente ao fts_soma dentro da dll
bom galera e isso ^^
by hacker fts315
- Código:
#include <windows.h>
HINSTANCE hin;
DWORD dw;
LPVOID lpv;
so lembrando q aq agente nao vai usar a funçao principal main, no lugar dela vai ser DllMain como retorno vai ser BOOL APIENTRY e como argumento nossas 3 variaveis, agente vai ter q retorna TRUE tambem
- Código:
#include <windows.h>
HINSTANCE hin;
DWORD dw;
LPVOID lpv;
BOOL APIENTRY DllMain(hin, dw, lpv)
{
return TRUE;
}
a estrutra da nossa dll ta pronta agora so coloca o prototipo da funçao e depois a funçao depois do DllMain, no prototipo agente tem q especificar _declspec(dllexport) antes do tipo, no caso aq eu vou criar uma funçao chamada fts_soma q vai retorna um tipo inteiro e vai ter como argumento duas entradas inteiras e vai retorna a soma das duas variaveis
- Código:
#include <windows.h>
_declspec(dllexport) int fts_soma(int x, int y);
HINSTANCE hin;
DWORD dw;
LPVOID lpv;
BOOL APIENTRY DllMain(hin, dw, lpv)
{
return TRUE;
}
int fts_soma(int x, int y)
{
return x + y;
}
para compilar tem linkar -Wall e -shared no caso eu to compilado pelo prompt entao ficaria algo assim
gcc fts.c -o hack.dll -Wall -shared
pronto vai gerar nossa dll, agora vamos aprender como carregar ela porem existe varias maneiras para isso mais so vou ensinar uma, para começar temos q declarar a biblioteca windows.h depois criar uma especie de prototipo usando typedef da funçao no caso a funçao q agente vai usar na dll vai ter um retorno tipo int e vai ter duas entrada tipo int e tambem declaramos esse tipo
- Código:
#include <stdio.h>
#include <windows.h>
typedef int(*fun)(int,int);
int main(void)
{
fun f;
}
agora criamos uma variavel do tipo HINSTANCE q no meu caso eu chamei de dll, ela vai servir para receber a dll carregada, vamos usar a funçao LoadLibrary e passar como argumento a nossa dll e depois atribuir ela a nossa variavel, tambem usamos a funçao FreeLibrary para liberar ela passamos como argumento nossa varivel q recebeu a dll
- Código:
#include <stdio.h>
#include <windows.h>
typedef int(*fun)(int,int);
int main(void)
{
fun f;
HINSTANCE dll;
dll = LoadLibrary("hack.dll");
FreeLibrary(dll);
}
antes da gente liberar a dll, agente usa nosso tipo q declaramos (no meu caso e o f) recebendo a funçao GetProcAddress, passamos como argumento a variavel q recebeu a dll e o nome da funçao q agente vai usar (a funçao dentro da dll q e fts_soma) , tambem temos q usar typecast para converter para o tipo (no meu caso e fun)
- Código:
#include <stdio.h>
#include <windows.h>
typedef int(*fun)(int,int);
int main(void)
{
fun f;
HINSTANCE dll;
dll = LoadLibrary("hack.dll");
f = (fun)GetProcAddress(dll,"fts_soma");
FreeLibrary(dll);
}
agora o tipo viro a propria funçao toda vez q agente usar o f vai ser equivalente ao fts_soma dentro da dll
- Código:
#include <stdio.h>
#include <windows.h>
typedef int(*fun)(int,int);
int main(void)
{
fun f;
HINSTANCE dll;
dll = LoadLibrary("hack.dll");
f = (fun)GetProcAddress(dll,"fts_soma");
printf("%d",f(300,15));
FreeLibrary(dll);
}
bom galera e isso ^^
by hacker fts315