Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi vergleichen von zwei librarys im speicher (https://www.delphipraxis.net/46886-vergleichen-von-zwei-librarys-im-speicher.html)

brechi 2. Jun 2005 22:52

Re: vergleichen von zwei librarys im speicher
 
warum die IDE abstürzt ist mir ein rätsel
so viel mach ich gar net im speicher rum oO

jo hab nich false zurückgegeben, kannst ja schaun was deiner meinung nach nen cheat ist, alles was net funzt wird ja inner msg box ausgegeben

Arnulf 5. Jun 2005 21:07

Re: vergleichen von zwei librarys im speicher
 
Hi
leider bin ich immer noch nicht dazu gekommen das wirklich durchzuschauen :(
aber ich denke dein code funktioniert ziemliche gut - du weißt was du tust :).

die ide ist immer dann abgestürtzt, wenn ich den cheat ins spiel injiziert hab und danach wieder entfernt - wenn er dann nochmal überprüft hat ist mir das delphi abgekackt.
Hab nur leider noch nicht mehr herumprobieren können ...
Ansonsten denk ich ist das genial - ich werd schon dazu kommen dir zu berichten wo das problem lag..

Arnulf

Arnulf 7. Jun 2005 14:24

Re: vergleichen von zwei librarys im speicher
 
Also ich hab mich mal kurz durchgeschaut und ein bisschen herumprobiert.

Abstürtzen tut er hier:
Delphi-Quellcode:
    for i := 0 to size-1 do
      pbyte(integer(p2)+i)^ := pbyte(integer(p2)+i)^-pbyte(integer(p1)+i)^;
    err := 0;
und zwar mit range check error.
Allerdings nur, wenn ein cheat installiert ist.

Was ich allerdings seltsam finde ist, daß er wenn ich die ganze funktion in einem eigenen programm laufen hab eigentlich funktioniert.
Wenn ich es allerdings in mein Programm einbaue dann stürtzt er ab.
Der code ist aber garantiert der gleiche und ich hatte den absturtz auch schon im separaten programm allerdings momentan gehts seltsamer weise.

der code ist deshalb sicher der gleiche, weil ichs mit copy und paste eingefügt hab.

Ich hab mich auch schon versucht ein bisschen durchzuwurschteln durch den code.
Ist im prinzip recht verständlich - wusste ja nicht, daß man einfach so den handle einer lib in einem anderen prozess bekommen kann :).

wo ich allerdings aussteige ist dann bei der funktion: compareExecuteSections
vor allem deshalb, weil ich den datentyp PImageDosHeader nicht kenne und mir auch nicht klar ist was letzten endes in der struktur steht auf den der pointer zeigt.

Hoffe damit ist dir klar warum das programm nicht mehr funktioniert :) mir nämlich nicht.

Danke
Arnulf

Edit: Ich hab mal ein bischen nachgeschlagen - jetzt verstehe ich die source ganz - gott sei dank :) - wusste ja nicht, daß solche header für .exe oder .dlls existieren - sag ja ich bin etwas ab vom schuß des programmierens...
Auch interessant für mich ist wohl IMAGE_EXPORT_DIRECTORY damit wäre es doch relativ einfach simple wrapper zu entdecken - ich müsste nur alle vom spiel geladene .dlls kontrollieren.
oder lieg ich damit falsch? - Das ist ein extrem interessantes kapitel.

Arnulf

Arnulf 5. Jul 2005 20:29

Re: vergleichen von zwei librarys im speicher
 
Hallo nochmal.
Leider hab ich ziemlich viel stress mit dem check :(

Delphi-Quellcode:
for i := 0 to size-1 do
      pbyte(integer(p2)+i)^ := pbyte(integer(p2)+i)^-pbyte(integer(p1)+i)^;
       err := 0;
das stürtzt leider mit range check error ab :(.

funktionieren tut es so:
Delphi-Quellcode:
    while (k < size-1) do
    begin
         if pbyte(integer(p1)+k)^ <> pbyte(integer(p2)+k)^ then inc (err);
         inc(k);
    end;
ich hab es auch mit comparemem probiert, aber brechi hat vermutlich recht und es kommt vor, daß 4 bytes unterschiedlich sind manchmal ( bei mir hat comparemem gut funktioniert ).

Jedenfalls hab ich mit der 2. ten methode das problem, daß leute mit dem neuen nvidia treiber plötzlich eine seltsame Auflösung am Bildschirm angezeigt bekommen.
Bei einem Screenshot ist die das bild aber normal.

Kann mir hier irgendjemand helfen? - wäre nett, wenn du mir noch ein paar tips dazu geben könntest Brechi :)

Arnulf

NicoDE 5. Jul 2005 21:46

Re: vergleichen von zwei librarys im speicher
 
Bei Pointern sollte immer mit Cardinal-Cast gearbeitet werden (nicht Integer).

Arnulf 5. Jul 2005 22:16

Re: vergleichen von zwei librarys im speicher
 
hi
was meinst du mit cardinal-cast?
ich mein ich kann natürlich integer gegen cardinal austauschen was aber vermutlich nicht viel unterschied macht.
Wenn doch, dann würde es mich interessieren welchen :).
Arnulf

Olli 5. Jul 2005 22:17

Re: vergleichen von zwei librarys im speicher
 
Cardinal ist vorzeichenlos. Deswegen!

NicoDE 5. Jul 2005 22:18

Re: vergleichen von zwei librarys im speicher
 
Pointer haben kein Vorzeichen. Deswegen kann es bei einem Cast auf Integer auch zu Range-Check-Fehlern kommen...

Arnulf 5. Jul 2005 22:23

Re: vergleichen von zwei librarys im speicher
 
Ja das ergibt sinn.
allerdings in dem zusammenhang nicht wirklich.
Hier geh ich ja nur den ganzen speicherbereich durch und zähle nach oben - wie sollte ich da eine negative zahl rausbekommen.
so groß ist der bereich nicht.
integer ist ja signed 32 bit also –2147483648..2147483647.

ich will echt nicht blöd fragen :) aber ich versuche immer etwas zu verstehen bevor ich es abschreibe hehe

Arnulf

NicoDE 5. Jul 2005 22:28

Re: vergleichen von zwei librarys im speicher
 
Zitat:

Zitat von Arnulf
Delphi-Quellcode:
pbyte(integer(p2)+i)^-pbyte(integer(p1)+i)^;

Das Byte in P1+i könnte größer sein als das in P2+i -> Range-Check.
Folgendes könnte trotz Range-Check funktionieren (habe gerade keine Delphi zur Hand):
Delphi-Quellcode:
Byte(PByteArray(p2)[i] - PByteArray(p1)[i]);


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 Uhr.
Seite 2 von 5     12 34     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz