Das kann man nicht sicher in Erfahrung bringen, aus dem Usermode. Es gibt zwar eine Methode, die ich entwickelt habe, die kann ich dir aber leider nicht verraten (ist nicht böser Wille oder Ähnliches). Diese meine Methode ist aber auch nicht zu 100% sicher und würde wohl eher unter Heuristik fallen.
Process Explorer hat einen Treiber, welcher solche Sachen erledigt. Übrigens: die Start-Adresse ist ja gerade das wichtige, ansonsten kannst du mir sicher verraten nach welchem Kriterium du ein Modul zuordnen willst?! Das Problem ist doch, daß ein Thread, welcher gerade läuft, auch mal aktuell seinen EIP in NTDLL.DLL oder anderswo haben kann - das ist also kein Kriterium. Und das schlimmste sind mit CreateThread() erstellte Threads, weil die nämlich alle auf den gleichen Trampolincode in Kernel32 zeigen. Damit ist dir also nichts gehilfen, weil alle
Win32-Prozesse (außer die Hauptthreads) ausnahmslos auf Kernel32 zeigen. Ist also wieder nix, wenn man die Startadresse eines Threads über die Native APIs ermitteln will. Im Endeffekt habe ich jetzt schon soviel ausgeschlossen, daß du dir meine Lösung (die ich wie gesagt nicht verraten darf) denken können müßtest.