Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

douglasdepaula

[Resolvido] Chamar função em EXE por DLL

Recommended Posts

Seguinte pessoal, estou com uma dúvida aqui...

 

Vamos supor:

tenho um .EXE e nele há function soma(a, b: int): integer

e esse EXE carrega uma dll.. supondo que o endereco da função "soma" no EXE seja: 004BC631

como posso chamar essa funcao no exe pela dll que esta carregada nele ?

tpw. se fosse o exe chamar a funcao na dll; function soma(a, b: int): integer; external 'DLLTeste.dll' name 'soma';

porém é o inverso.. preciso chamar uma função do exe pela dll.. Eae alguém tem alguma ideia de como fazer ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que voce quer fazer ?

 

O que se trata ae e exportar a dll

 

Exemplo :

 

function Multi(n,n1 : double);

begin

result := n*n1;

end;

 

Para exportar essa funcao para o EXE

 

function Multi(n,n1 : double);stdcall; external 'Multi.dll' name 'Multi';

 

Voce ira declrar isso la em Private / Public

 

Portanto voce ira agora no EXE e ira usar

begin

Multi(1*3);

 

 

E um exemplo figurado , nao e ligado ao codigo , so para voce entender de que voce tera que declarar a dll no EXE e usar sua funcao normalmente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eae Asskiller..

se nun tendeu bem oq eu kero.. e tpw oq você disse mesmo.. soq seria como se tivesse exportando uma funcao do exe.. e chama-la na dll..

como se fosse isso:

 

na dll ->

asm

push 1

push 2

call $005B1541; // EnderecoDaFuncaoSomaNoExe

end

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao para voce exportar uma dll para seu exe , voce declara no seu exe

 

function Multi(n,n1 : double);stdcall; external 'Multi.dll' name 'Multi';

 

O nome da funcao que voce quer exportar e o nome da dll etc

 

Apos expota-la voce ira usa la no seu programa....

 

Qual seria o fim disto ?

 

Abracos

Compartilhar este post


Link para o post
Compartilhar em outros sites

>___<

mano c ainda não entendeu a minha situação aki.. vou tentar explicar denovo

é o seguinte..

 

Tenho um programa xxxxx.exe ; o qual não tenho o source.. apenas o arquivo ja compilado..

eu consigo fazer com que esse programa carregue minha dll por hook...

e no programa.. vamos supor que tenha um procedure teste(parametro);

agora pela minha dll que está carregada no programa.. como eu poderia chamar esse procedure teste(..);

que está no executavel, tendo em maos o endereço do procedimento..

tpw.. em um determinado momento na dll.. chame esse endereço na memoria do EXE..

push Parametro

call $005B3214

 

seria como se o EXE fosse como uma dll

exports

teste;

 

e a dll como um EXE

procedure teste(parametro: integer); external 'programa.exe' name 'teste';

so um exemplo.. pq assim eh so pra chama funcs de dll msm..

mas preciso chamar de dentro da dll, uma função que esta no executavel...

 

 

Edit:

o fim disto seria tpw criar um plugin para o programa..

quero adicionar novas funcionalidades nele.. mas p/ faze-lo

preciso disto que mencionei acima..

Compartilhar este post


Link para o post
Compartilhar em outros sites

E mais facil voce estudar e codar o programa xxx.exe

Pois isso que voce quer fazer demanda uma trabalho e nem sempre dara certo , voce quer carregar uma function de um exe que nao possuem source ?

Como voce tera acesso a function especifica ?

 

E exportacao so funciona com dll , nao e possivel exportar uma funcao de um exe para dll....

 

Hook , entenda

 

veja :

 

Existe um metodo chamado Call

Em que consiste em voce chamar uma funcao de outro programa pelo seu.

Se no programa y , possui a mensagem OI! , eu posso pegar o address da mensagem OI e fazer um call no meu programa X e a mensagem OI ira aparecer..

 

var
Calladdress : dword;
begin
Calladdress :=Dword($0012D34);
asm
Call Calladdress;
end;

Seria algo nesse genero ai

 

 

Enfim , nao sei para que voce quer fazer isso , esta relacionado a jogo ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe um metodo chamado Call
Em que consiste em voce chamar uma funcao de outro programa pelo seu.
Se no programa y , possui a mensagem OI! , eu posso pegar o address da mensagem OI e fazer um call no meu programa X e a mensagem OI ira aparecer..

 

o que quero fazer é basicamente isso mesmo..

supondo que eu fiz um exe e tem um procedimento que vai fazer aparecer uma MsgBox qndo executado;

eu do hook nesse meu exe pra ele carregar minha dll.. e pela dll fazer uma call ao endereco do procimento..

porem usando seu code eu não consegui. o__O

 

coloquei isso no inicio da dll

var

Calladdress : dword;

begin

Calladdress := dword($004A6F00);

asm

call Calladdress;

end;

 

soq qndo executado o programa.. da crash e trava..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie sua DLL e insira o Botao nela...

 

Procedure TForm1.Button1Click (Sender: TObject);
var
CallAddress : dword;
begin
CallAddress := Dword($004A6F00);
asm
Call CallAddress;
end;
end;

 

Upa o programa que voce quer fazer o Call para mim ae...

 

Apos isso pegue um Injector e injete essa dll no programa , e voce tera feito um HOOK ;)....

 

Irei fazer uma video aula sobre , para voce se preciso , para ter uma nocao....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eae Asskiller..

fiz uma app aqui como exemplo.. segue link

http://www.4shared.com/file/WRTo6Kgh/Project1.html

no exe ha um procedure chamado teste.. quando executado escreve uma linha em um TMemo no form..

encontrei duas referencias ao procedure no exe..

004A6EA9

004A6EF0

entao com esses enderecos eu fiz como no seu exemplo. e na dll fiz o teste com cada um desses addr.. porem quando da a call

ocorre um crash no executavel...

ve ae oq você consegue fazer..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Douglas

Tem msn ?

Me passe por PM

 

Bom provavelmente voce esta pegando o address para fazer a chamada , esta errado e por isso ocorre uma mensagem de erro , eu fiz uma video aula com um exemplo que eu fiz no delphi e acho que ira lhe ajudar , assim que der estarei postando no meu blog.

 

www.nkilla.com

 

Abraco

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.