Bem vindo ao LifeGames Demo
Cadastre-se agora para ter acesso a todos os nossos recursos. Uma vez cadastrado e logado, você será capaz de criar tópicos, postar respostas a tópicos já existentes, a reputação de seus companheiros, começar seu próprio mensageiro privado, atualizações de status post, gerir o seu perfil e muito mais. Esta mensagem será removida assim que tiver logado.
Entrar Cadastre-se


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

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

1 criar e carregar dll em c em Qua Abr 24, 2013 12:39 am

Moedas Moedas : 201
Mensagens Mensagens : 92
Humor Humor : *-*
Reputação Reputação : 5
Quebra de regras:
0 / 1000 / 100

avatar

hacker fts315

Moderador Informática

Moderador Informática

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



[center][Você precisa estar registrado e conectado para ver esta imagem.]


Contato:
Facebook: /hacker.fts315
Ask: /hfts315
Ver perfil do usuário http://www.facebook.com/hacker.fts315

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum