Anzahl der Module der aktuellen Anwendung auslesen?



  • Guten Morgen!
    Ich hätte eine Frage undzwar:
    Ich habe eine DLL mit C++ gemacht, diese Injektziere ich jetzt in einen Prozess, wie kann ich die Anzahl der Modulen ausgeben, die auf diesen Prozess zugreifen?
    Ist vielleicht etwas schlecht erklärt.. Sorry 😃

    Diese Funktion gibt es auch in einem Programm welches sich "Process Hacker 2" nennt, dort sieht sie so aus:
    http://i.gzn.jp/img/2009/08/14/process_hacker/ph24.png

    Ich möchte nur die Anzahl herauskriegen mit meiner Dll, nicht die Namen oder sonstiges.

    Wäre echt nett wenn ihr mir helfen könntet, schönen tag noch 😉



  • Ich glaub ich will gar nicht wissen was du da machen willst 🙂

    wie kann ich die Anzahl der Modulen ausgeben, die auf diesen Prozess zugreifen?

    Ich nehm an, als "Module" ist hierbei Dll - dynamische Lib gemeint ?

    Dann eine schreckliche Nachricht fuer dich: Dlls greifen niemals auf prozesse zu. sondern andersrum, Prozesse benutzen/laden Dlls.

    Prozesse untereinander kommunizieren immer nur ueber IPC, sind also quasi voellig getrennt.

    Nun formulier noch mal, was genau Du willst ....

    Ciao ...



  • Ja ich möchte die Anzahl der Dlls die von dem Prozess benutzt werden herausfinden.





  • Kannst du mir ein Beispiel mit der Verwendung geben wie im ersten Post beschrieben? Danke!



  • Unten, unter Example ist ein Beispiel angegeben (bzw. der Link dazu).



  • Ich möchte ja nur in einer MessageBox die Anzahl aller Module ausgeben, das sieht nicht danach aus..



  • Kann man aber leicht herausfinden.
    Schauen wir uns das Beispiel mal an.
    In der main() wird jeder Process durchgegangen, das ist für uns irrrelevant.
    Für jeden Process wird die Funktion PrintModules aufgerfuen, die alle Module eines Prozesses ausgibt.
    Die entscheidenden zwei Zeilen sind aber die if() und der Kopf der For-Schleife.
    Beim if() wird EnumProcessModules aufgerufen. Als erstes kommt ein handle zu dem Prozess. Dann das Array, was die Module beinhalten soll und die Größe davon. Der letzte Parameter nimmt die Adresse eines DWORDs, dort wird die benötigte Größe in Bytes hineingeschreiben, die das Array brauchen sollte (nicht die Anzahl der Module!).
    Diese Infos hättest du alle aus dem Beispeil bzw. aus der Referenz nehmen können.
    Nun überlegen wir weiter:
    Da du dich nicht für die einzelnen Module interessierst, können wir als Array einfach die Adresse einer dummy-Variablen nehmen, die Größe (also 1) kommt dann als drittes Argument und das vierte Argument nimmt das für uns interessante auf: die Adresse der Variablen, wo die Anzahl der benötigten Bytes rein soll. Doch wie kommen wir auf die eigentlich Anzahl? Das steht im Kopf der for-Schleife: i < (cbNeeded / sizeof(HMODULE)). Also einfach die Gesamtbytes durch die Anzahl der Bytes von einem HMODULE teilen. Wie man jetzt an den HANDLE zu dem Prozess kommt? Google hilft garantiert weiter.



  • Ich bin absoluter Anfänger, und verstehe nicht was du meinst.. Könnte mir nicht irgendwer ein Beispiel, welches leicht zu verstehen ist geben? Vielen Dank 🙂



  • @zeg
    Guck dir das Beispiel auf der MSDN Seite an, und versuche zu lernen was dir noch fehlt damit du es verstehst.
    Sonst wirst du nie dazulernen.
    Beim Lernen werden dir hier u.U. Leute helfen.

    Wenn du dagegen alles was du nicht verstehst als "einfaches Beispiel" (=wir machen es für dich und du kopierst es 1:1 aus dem Forum raus und in dein Projekt rein) haben willst, dann wirst du erfahrungsgemäss hier auf wenig Gegenliebe stossen.
    Weil das mit Lernen nicht viel zu tun hat, sondern heisst dass wir deine Arbeit für dich machen.



  • Danke, habe es hinbekommen 🙂


Log in to reply