Wyciąganie procedury

0

Jak wyciągnąć procedurę z pliku .exe?---------------------------
Delphi 6

Pozdrówka

0

Watek dekompilacji programow przerabiany byl setki razy. Nie da sie. --Pozdrawiam {hello}
Tomasz K.

0

Kurczę, trochę źle się wyraziłem... Chodzi mi oczywiście o uruchomienie procedury, tak, jak się uruchamia dynamicznie procedurę z biblioteki .dll. Sorry za niejasne wyrażenie się {wstyd}---------------------------
Delphi 6

Pozdrówka

0

szczerze mówiąc, prościej jest powziąć poszukiwania źródeł programu (na szeroką skalę) niż to robić, ale możnaby zrobić tak :

  1. Utworzyć nowy proces systemowy
  2. Proces ten ładowałby do pamięci mu przydzielonej odpowiedni(e) kawałki kodu z pliku *.exe
  3. Inicjalizował odpowiednio obszar danych (wpisanie stałych itp z pliku *.exe)
  4. Zmieniał swój PSP tak aby wskazywał na załadowany kod i oddawał mu sterowanie
  5. przechytywałby koniec pracy tej procedury i robił dalej swoje (modyfikując na powrót psp itd.

Ale:

  1. Trzeba znać perfekt format exe dla windozy (może ktoś zna, chętnie poczytam)
  2. przewidzieć wszystkie odwołania procedury do innych fragmentów kodu
  3. Wiedzieć jaki jest sposób przekazywania argumentów i wyników procedury
  4. Wiedzieć jak zainicjalizować obszar danych

Droga prze mękę zaręczam Ci
--Michał
TJS group
delphi 5,6

0

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 :
&gt
&gtDroga prze mękę zaręczam Ci
&gt
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 ... :)

------------Reklama-------------
Szukasz pomocy?
Najszybsza pomoc dostępna na IRC:
serwer: warszawa.ircnet.pl
sieć: POLNet
kanał: #4programmers.net lub #4programmers

0

No to w takim razie może wykombinować coś innego. Bo chcę zrobić w programie obsługę plug'inów, ale te plug'iny muszą mieć dostęp do niektórych zmiennych w programie. I wymyśliłem to sobie tak, że uruchamia funkcję z execa i jako rezultat dostaje tą zmienną. Może ktoś ma lepszy pomysł?---------------------------
Delphi 6

Pozdrówka

0

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.

0

Khem... Co to ta funkcja zwrotna? Niewiele zrozumiałem z tego wszystkiego :). Mógłbyś może podać jakiś przykład?---------------------------
Delphi 6

Pozdrówka

0

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 "

0

thenkles napisał:
Khem... Co to ta funkcja zwrotna? Niewiele zrozumiałem z tego wszystkiego :). Mógłbyś może podać jakiś przykład?
&gt
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

------------Reklama-------------
serwer: warszawa.ircnet.pl sieć: POLNet kanał: #4programmers.net

0

Ok, a mógłbyś powiedzieć coś dokładniej? Np. gdzie ma być umieszczona funkcja, jak ją wywołać?---------------------------
Delphi 6

Pozdrówka

0

thenkles napisał:
Ok, a mógłbyś powiedzieć coś dokładniej? Np. gdzie ma być umieszczona funkcja, jak ją wywołać?
&gt
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

------------Reklama-------------
serwer: warszawa.ircnet.pl sieć: POLNet kanał: #4programmers.net

0

Ten sposób mnie nie urządza zbytnio :(. Już tak próbowałem na poczatku.
Tą funkcję trzeba by było wywoływać cały czas, poza tym chcę mieć możliwość działania kilku plug'inów naraz. Może da się ustawić w jakiś sposób zmienną globalną, działającą w całym systemie?---------------------------
Delphi 6

Pozdrówka

0

Naprawdę polecam Interface'y. Masz 3 kroki do zrobienia:

  1. Zdefiniwanie interfacu i klasy go implementującej (główny program)
    2.Zarejestrowanie programu jako serwera OleAutomation w systemie
  2. Napisanie Pluginów, korzystających z tego serwera.

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 "

1 użytkowników online, w tym zalogowanych: 0, gości: 1