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.

0
Oho napisał(a)

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.

Właśnie się ciągną filmy. Dzięki! Nie ma przycisku pomógł?
Obawiałem się, że to za proste.

0

Właśnie się ciągną filmy. Dzięki! Nie ma przycisku pomógł?
Obawiałem się, że to za proste.

Ignorując fakt że mówisz niezrozumiałym językiem, to nie działa. Ale wiesz, to że to nie ma prawa działać, nie znaczy że nie wyczarowałeś złudzenia że działa.
W każdym razie chyba chodziło tobie o to że problem rozwiązany. (Następnym razem pisz bardziej formalnym językiem...)

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