Jak wyciągnąć procedurę z pliku .exe?---------------------------
Delphi 6
Pozdrówka
Pozdrówka
Watek dekompilacji programow przerabiany byl setki razy. Nie da sie. --Pozdrawiam {hello}
Tomasz K.
Pozdrówka
szczerze mówiąc, prościej jest powziąć poszukiwania źródeł programu (na szeroką skalę) niż to robić, ale możnaby zrobić tak :
Ale:
Droga prze mękę zaręczam Ci
--Michał
TJS group
delphi 5,6
ec_mike napisał:
szczerze mówiąc, prościej jest powziąć poszukiwania źródeł programu (na szeroką skalę) niż to robić, ale możnaby zrobić tak :
>
>Droga prze mękę zaręczam Ci
>
Zgadza się :) - męka. Jakoś system (tzn Win9x) dziwnie zamienia plik user.exe na user32.dll i odwrotnie (gdzieś jest opisany ten dziwny przypadek) i korzysta z procedur tam umieszczonych. Może więc trzeba by uruchomić procedury z execka tak samo jak z dll? (a nuż się uda :) )--Jest jeszcze jeden błąd ... :)
Pozdrówka
Funkcja zwrotna. jako parametr jakiś identyfikator zmiennej, zwraca wartość. I w podobny sposób ustawianie zmiennych. Ewentualnie to samo przez messagesy, ale to troche dziwne rozwiązanie.
Pozdrówka
Dobrym rozwiązaniem jest stworzenie Interfacu dla twojego programu w execu.
Oznacza to, że projektujesz zespół funkcji które mogą być wywoływane przez zewnętrzne programy z wykorzystaniem techniki COM. (lub Ole). I wtedy twój programik działa jako serwer (w systemie) a zewnętrzne programy dostają wskaźnik do twojego interfacu a zatem mogą wywoływać zdefiniowane w nim funkcje. Trochę to zamotane ale w examplesach jest taki prosty model (client - serwer) pokazany.
Pozdrawiam {browar} --Michał
TJS group
delphi 5,6
" Praktyka - to jest wtedy gdy wszystko działa lecz nikt nie wie dlaczego
Teoria - jest wtedy gdy nic nie działa ale wszyscy wiedzą dlaczego,
My łączymy teorię z praktyką
NIC NIE DZIAŁA I NIKT NIE WIE DLACZEGO "
thenkles napisał:
Khem... Co to ta funkcja zwrotna? Niewiele zrozumiałem z tego wszystkiego :). Mógłbyś może podać jakiś przykład?
>
Eksportujesz po prostu funkcję, która zwraca wartość równą zmiennej (ewentualnie wskaźnik do miejsca gdzie ta zmienna jest w pamięci)--Jest jeszcze jeden błąd ... :)
--- DELPHI HELP po polsku ---
http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=18659
Pozdrówka
thenkles napisał:
Ok, a mógłbyś powiedzieć coś dokładniej? Np. gdzie ma być umieszczona funkcja, jak ją wywołać?
>
Oj...
Czy kiedykolwiek tworzyłeś dll-ki?
library test;
uses
SysUtils,
Windows;
var
Zmienna1, Zmienna2 : TTypZmiennej;
function PodajWaroscZmiennej(NazwaZmiennej: string): TTypZmiennej stdcall;
begin
case NazwaZmiennej of
'Zmienna1' : Result := Zmienna1;
'Zmienna2' : Result := Zmienna2;
end;
end;
Exports
PodajWartoscZmiennej index 1;
begin
end.
Jeżeli chcesz przekazywać tylko wskaźniki do zmiennej to zwracaj wartość Addr(Zmienna1), a jako typ zwracanej wartości Pointer.--Jest jeszcze jeden błąd ... :)
--- DELPHI HELP po polsku ---
http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=18659
Pozdrówka
Naprawdę polecam Interface'y. Masz 3 kroki do zrobienia:
I masz zapewnione pewne mechanizmy kontroli dostępu do danych, to znaczy możesz ustawić kolejkowanie wątków wywołujących twój serwer (zatem nie ma problemu z równoczesnym napisywaniem danych itp.)
Przykładem klienta (jak twój plugin) jest w helpie progrmik drukujący coś z worda. W helpie też jest szczegółowo oposany proces tworzenia serwera.
Pozdr {hello} --Michał
TJS group
delphi 5,6
" Praktyka - to jest wtedy gdy wszystko działa lecz nikt nie wie dlaczego
Teoria - jest wtedy gdy nic nie działa ale wszyscy wiedzą dlaczego,
My łączymy teorię z praktyką
NIC NIE DZIAŁA I NIKT NIE WIE DLACZEGO "