Hey,
die Baseadresse eines Moduls muss nicht immer statisch sein (von kernel32 und user32 mal abgesehen, soweit ich weiß), aber bei dem Hauptmodul (der '.exe') ist sie meist 0x00400000. Jedes Modul kann eine
gewünschte Baseadresse in seinem

(das ImageBase-Feld) angeben, die soweit möglich vom Windows Loader (das, was hinter LoadLibrary steht) berücksichtigt wird.
Um unter .net die Baseadresse eines bestimmten Moduls innerhalb eines bestimmten Prozesses herauszufinden, würde ich die

durchgehen, beim korrekten praktisch 'anhalten' und für diesen Prozess die

durchgehen und bei dem gesuchten (kann man ja die Namen einfach vergleichen) die Baseadresse aus dem 'BaseAddress'-Feld der entsprechenden Modulklasse entnehmen.
Zu CE:
Kann es sein, dass du einen Pointer hinzufügst, die Pointerbase die BaseAddress ist und das 1. Offset dann das entsprechenden Offset? Das wäre so wohl falsch, da die ersten Bytes eines Moduls immer 4D5A sind und das ja wohl kaum irgendein sinnvoller Pointer sein kann.
Hoffe, dass ich helfen konnte

Jeoni