Komunikacja międzyprocesowa albo coś prostszego

0

Witam!
Poproszę o nakierowanie w poniższym przypadku:
Program "A.exe"-mam do niego "dostęp" przez możliwość modyfikowania funkcji w dll.
Program "B.exe"-konsolowy, native c/c++, moje wypociny.
Uruchamiamy program A.exe, w dll jest zawarta byłaby CreateProcess, która uruchamia B.exe. Istnieje więc mozliwość przekazania uchwytu.
Potrzebuję, żeby A.exe mógł przesyłać/modyfikować cztery bajty w B.exe i na odwrót. Programy chodzą poza tym niezależnie(własne zależności czasowe)
Pytanie-jaki mechanizm do wzajemnego "gmerania" w tych powiedzmy czterech bajtach?
Aha-win.xp, ze względu na szybkość winapi.

2

Pytanie-jaki mechanizm do wzajemnego "gmerania" w tych powiedzmy czterech bajtach?

WriteProcessMemory/ReadProcessMemory. A wystarczyło spytać googla.

0

Witam i dzięki! Gdy już wiem czego szukać to i google coś podpowie.
Znowu poproszę o poradę-jakich sposobów najlepiej użyć na uzyskanie odpowiednich uchwytów wymaganych przez funkcje i jak przekazać je oraz adresy bazowe z jednej do drugiej aplikacji. Z lektury przykładów wynika kilka możliwości, który scenariusz będzie najłatwiejszy dla początkującego? W którym procesie lepiej umieścić (write)ReadProcessMemory-pod czy nadrzędnym. Chodzi mi o prostotę implementacji, obsługa w programie już z górki.

0

Użyj CORBA, albo socket'ów :D

0

Znowu poproszę o poradę-jakich sposobów najlepiej użyć na uzyskanie odpowiednich uchwytów wymaganych przez funkcje i jak przekazać je oraz adresy bazowe z jednej do drugiej aplikacji. Z lektury przykładów wynika kilka możliwości, który scenariusz będzie najłatwiejszy dla początkującego?

Ten zrozumiały, a generalnie wszystkie opierają się na tym samym. Wyszukujesz proces/okienko, pobierasz uchwyt, otwierasz do odczytu, czytasz.
A skoro jesteś początkującym, to raczej i tak ci się nie uda tego zaimplementować.

W którym procesie lepiej umieścić (write)ReadProcessMemory-pod czy nadrzędnym. Chodzi mi o prostotę implementacji, obsługa w programie już z górki.

Ja bym proponował nadrzędny jakoże to raczej oczywisty wybór. Podrzędny wcale nie musi być wywołany akurat z nadrzędnego. Więc ze względu na architekturę pewne rozwiązania są oczywiste...

0

Dzięki za pocieszenie.
CreateProcess() ma w parametrach ppiProcInfo, do której ponoć zapisuje m.in. uchwyt procesu tworzonego i podobno można z niego korzystać do manipulacji w utworzonym procesie. Czuy uchwyt ten można bezpośrednio dać do WriteProcessMemory?

0

Dla ułatwienia (tak mi się wydaje, nigdy nie bawiłem się w tego rodzaju komunikacje na Czytaniu / Pisaniu w pamięci) lepiej użyć statycznych adresów
Prawda?

np
static int x=1;

0

Czuy uchwyt ten można bezpośrednio dać do WriteProcessMemory?

nie, musisz sobie jeszcze ten proces otworzyć, OpenProcess czy coś takiego. Dopiero z uchwytem z tego możesz używać write/openprocessmemory

Tak w sumie to chyba lepiej byłoby dawać to rurami albo messagami, ale cóż... Zawsze czegoś kolega się nauczy... :p . Jakby kolega chciał zmienić to osobiście proponuję message, są łatwiejsze. Albo zawsze można robić połączenie z localhostem, ale tutaj jest ryzyko że jakaś niedobra zapora zablokuje >.>
Ale zostając przy aktualnym rozwiązaniu, najlepiej by było gdyby pod-program tworzył w swojej pamięci segment pod znanym adresem a nad-program po prostu by czytał ten segment. Nie byłoby zabaw ze zmieniającymi się adresami.
Hint: Procedura do tworzenia segmentu wirtualnej pamięci to VirtualAlloc
Hint #2: Poczytaj o zarządzaniu pamięcią w Windzie, polecę http://www.uw-team.org/videoarty_reverse.html [lekcja #3]

0
Hell4Ge napisał(a)

Dla ułatwienia (tak mi się wydaje, nigdy nie bawiłem się w tego rodzaju komunikacje na Czytaniu / Pisaniu w pamięci) lepiej użyć statycznych adresów
Prawda?

np
static int x=1;

static-ciekawa koncepcja. Najbardziej "prostacki" pomysł:

static int x=0;

dopliku zapisuję &x;(powiedzmy 0xac1000)
W drugiej aplikacji-
int y;
y=0xac1000;
i sobie piszę co chcę:
y=1;

W alpikacji a:

x=1;
Czy dobrze kolegi myśl odczytałem i czy na to jakiekolwiek widoki na działanie?
W uC byłoby ok, w windzie???

0

W drugiej aplikacji-
int *y;
y=0xac1000;

1.Naucz się używać tagowania.
2.Takie rzeczy tylko w T-Mobile
3.Widać jeszcze nie obejżałeś filmiku który tobie poleciłem, tam jest wytłumaczone (pośrednio) czemu takie coś nie zadziała.

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