seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^

Participe do fórum, é rápido e fácil

seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Você não está conectado. Conecte-se ou registre-se

[tutorial] criar e carregar dll em c

Ir para baixo  Mensagem [Página 1 de 1]

1[tutorial] criar e carregar dll em c Empty [tutorial] criar e carregar dll em c Sáb Out 20, 2012 1:20 pm

Kodo no Kami

Kodo no Kami
master
master

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

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

https://endoffile.umforum.net

Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos