Witam. Piszę program w którym operuje na adresach pamięci. W programie potrzebuje przechwytywać wartości z innego programu. Jednak adresy się zmieniają, w zależności od tego jaki adres w pamięci procesu ma konkretna biblioteka dll. W jaki sposób otrzymać adres biblioteki dll w pamięci procesu ? Np biblioteki hw.dll
Biblioteka nie jest lokowana w pamięci procesora tylko w pamięci RAM, możesz odczytać tylko identyfikator (PID) np w Menadżerze zadań Windows.
Procesor tylko steruje przepływem danych...
Przydało by ci się trochę teorii ;]
Ale w którym momencie ja coś mówie o procesorze ??
Przeczytaj jeszcze raz mój post, pojawia sie tam jedynie słowo proces ^^
Mam program który potrafi odczytać za każdym razem adres biblioteki, CheatEngine sie nazywa
Wybacz sądziłem że "pamięci procesu ma ..." masz na myśli procesor...
ale skoro nie to małe sprostowanie jak uruchamiasz proces to jeżeli on ładuje bibliotekę DLL to w drzewie tego procesu będą załadowane biblioteki. Możesz napisać program który je odczyta. Niestety kodu źródłowego Ci nie podam bo nie bawiłem się czymś takim ale popatrz na kod źródłowy CheatEngine 5 http://www.cheatengine.org/downloads.php
Chodzi mi o dostęp do adresu biblioteki dll z której korzysta dany proces. Np w programie CurrProcess coś takiego występuje, chciałbym móc uzyskać Base Address kilku bibliotek
tak jak tutaj
Pomożecie ?:)
Nie wiem może obecnie są lepsze funkcje ale dawniej jeszcze pod win 98 można było to zrobić wykorzystując funkcje:
CreateToolhelp32Snapshot
Module32First
Module32Next
no i oczywiście CloseHandle do zwolnienia uchwytu uzyskanego przez CreateToolhelp32Snapshot
Nie wiem czy zdajesz sobie sprawę że biblioteka DLL może sobie fruwać po pamięci.
Przy każdym wywołaniu jakieś funkcji może być w innym miejscu.
Masz jedynie pewność że dla twojego procesu zawsze widziana pod jednym adresem.
Zawsze możesz pobrać adres jakieś funkcji a od niej zaczynać odliczać.
Właśnie mi o to chodzi, chodzi mi o adres biblioteki dll dla konkretnego procesu
Powiedzmy ze nazwa biblioteki z jakiej korzysta program do mydll.dll
Udało mi sie dotrzec do tego ze wartosc w tym programie znajduje sie pod adresem mydll.dll + 0x0123456
w jaki sposób znaleźć adres biblioteki dll ?
Tutaj widze jakieś rozwiązanie w C#
http://stackoverflow.com/questions/269263/find-the-address-of-a-dll-in-memory
Czy chociaz rozumiecie co chce uzyskać ?:(
Przecież już Ci podano - Module32First
/Module32Next
. W tym dziale znajdziesz wiele kodów z tego korzystających. _13th_Dragon przesadza, dllka póki jest w użyciu to siedzi w jednym miejscu, zawsze można jej też (nawet zdalnie) podnieść licznik referencji żeby nie została zwolniona przedwcześnie (z Twojego punktu widzenia).