D3D9 menü

08/01/2011 20:13 MrSm!th#16
Quote:
Originally Posted by link View Post
@MrSm!th:
Was ist, wenn's die gleiche D3D9-Dll ist, allerdings reloziert? :O
Normalerweise gibt man keine absolute Adresse an, sondern ein Offset zur Dll Base ;O
08/01/2011 20:29 link#17
Hier war nur die Rede von (statischen) Adressen, sodass ich gar nicht daran dachte, dass ihr auch Offsets meinen könntet :P schlimm.. muss echt mehr schlafen *Ausreden such*
08/01/2011 21:16 MrSm!th#18
Naja ok, die Rede davon war hier auch nicht, ist nicht deine Schuld ;O
Aber im grunde ging es ja einfach darum, fixe Adressen in den Code zu schreiben anstatt zb. die VTable per Pattern Search zu suchen.
Und das hat nicht einfach nur was mit dem OS zutun, sondern eher mit der Dll Version.

Btw. für gewöhnlich hat eine Dll auf dem gleichen OS auch immer die gleiche Base, es sei denn, man stellt es anders ein o.ô
Zumindest haben bei mir alle Dlls immer die gleiche Base.
08/01/2011 21:49 link#19
Jo, wenn die Dlls gleich sind, wird der Code immer gleich gemappt und das Offset bleibt gleich.
Nur unterscheidet sich das evtl. von Dll zu Dll aufgrund von Version, OS, Patches, etc. also wäre es jetzt nicht zum Releasen geeignet.
Weiß allerdings selber nicht, wie sich das mit der d3d9.dll verhält

An welcher Stelle sich die Dll befindet hängt natürlich davon ab, wie die gewählte ImageBase lautet und wann und wo Speicher reserviert wird, also auch von den anderen Dateien, die gemappt werden. Bei gleichen Bedingungen ist es sehr wahrscheinlich, dass die Dlls auch gleich geladen werden und sie die ImageBase erhalten, die sie vorher auch hatten, kann sich aber auch durch Threads, die ungleich ausgeführt werden, etc., verändern
08/01/2011 22:02 MrSm!th#20
Quote:
Originally Posted by link View Post
Jo, wenn die Dlls gleich sind, wird der Code immer gleich gemappt und das Offset bleibt gleich.
Nur unterscheidet sich das evtl. von Dll zu Dll aufgrund von Version, OS, Patches, etc. also wäre es jetzt nicht zum Releasen geeignet.
Weiß allerdings selber nicht, wie sich das mit der d3d9.dll verhält
Genau das ist doch das, was ich sagte, die Adresse bleibt solange gleich, solange die Dll dieselbe ist ;O
Für verschiedene Systeme gibts ja normalerweise verschiedene Versionen.

Quote:
An welcher Stelle sich die Dll befindet hängt natürlich davon ab, wie die gewählte ImageBase lautet und wann und wo Speicher reserviert wird, also auch von den anderen Dateien, die gemappt werden. Bei gleichen Bedingungen ist es sehr wahrscheinlich, dass die Dlls auch gleich geladen werden und sie die ImageBase erhalten, die sie vorher auch hatten, kann sich aber auch durch Threads, die ungleich ausgeführt werden, etc., verändern
Mich würde mal interessieren, wie sich das verhält, wenn die im Projekt gewünschte ImageBase schon an eine andere Dll zur Laufzeit vergeben ist, wird dann die Dll nicht geladen?
08/01/2011 22:15 link#21
"Genau das ist doch das, was ich sagte, die Adresse bleibt solange gleich, solange die Dll dieselbe ist ;O"
Jojo, wollte mit meinem ersten Post jetzt auch nur klugscheißern, weil ich etwas engstirnig einfach nur "Adresse" gelesen und nicht an Offsets gedacht habe :P

"Mich würde mal interessieren, wie sich das verhält, wenn die im Projekt gewünschte ImageBase schon an eine andere Dll zur Laufzeit vergeben ist, wird dann die Dll nicht geladen?"
Wie meinst du das genau?
Wenn du dir eine ImageBase selber aussuchst und die dann allerdings schon belegt ist?
Deine Dll wird an eine freie Stelle gemappt und reloziert, sodass absolute Adressen innerhalb der Dll wieder stimmen. Gibt's keine relocs wird die Dll trotzdem an eine andere Stelle geladen und stürzt später dann einfach wegen falscher Referenzen ab.