Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi asm inline (https://www.delphipraxis.net/59661-asm-inline.html)

UniPerson 26. Dez 2005 19:30


asm inline
 
möchte über delphi per command click mit hilfe von asm diese nummern ändern

0012F0B6 49 DEC ECX
0012F0B7 45 INC EBP
0012F0B8 2D 354A5330 SUB EAX,30534A35 <<< diese nummern per click ändern!
0012F0BD 52 PUSH EDX
0012F0BE 4E DEC ESI
0012F0BF 3350 00 XOR EDX,DWORD PTR DS:[EAX]


ist es möglich? per asm

Dax 26. Dez 2005 19:49

Re: asm inline
 
Ja, es geht. Allerdings musst du mit VirtualProtect erst den Speicherbereich für Schreibzugriffe freischalten. (Wie's geht - vergessen)

Den Wert zu ändern geht auch ohne asm: ein einfaches PLongInt(0012F0B89)^ := sollts schon tun ;)

brechi 26. Dez 2005 20:01

Re: asm inline
 
der speicherbereich 0x0012XXXX ist sehr wahrscheinlich auf dem stack, dafür muss du dir dann keine schreibrechte(virtualprotect) holen (sollte man aber immer mal besser machen ;) ) wie schon gesagt genügt ein pinteger($0012.....)^ := 123456, abr wenn es wirklich auf dem stack liegt kann es ssein, dass sich die adresse auch mal ändert

Dax 26. Dez 2005 20:04

Re: asm inline
 
Das es auf dem Stack liegt ist natürlich sehr gut möglich, aber wegen der Disassembly oben hab ich eher an ne verschobene ImageBase gedacht. Falls man die überhaupt so weit verschieben kann ^^

UniPerson 26. Dez 2005 20:37

Re: asm inline
 
die offset adresse bleibt gleich,habs getestet,


kann mir vieleicht einer einen ausführlichen code reinposten?

danke

brechi 26. Dez 2005 22:07

Re: asm inline
 
das geht mit

Delphi-Quellcode:
PInteger($0012F0B89)^ := $12345678
oder

Delphi-Quellcode:
asm
  mov [$0012F0B89], $12345678
end;
wenn das in deinem Programm ist, ist es in einem anderen programm musst du das mit WriteProcessMemory machen, dafür einfach mal hier im Forum suchen

UniPerson 27. Dez 2005 14:21

Re: asm inline
 
der code funktioniert perfekt,er schreibt das auf der adresse,aber das problem ist jetzt ,es schreibt auch ein anderes programm drauf und wird überschrieben,habs den code dann in einen timer reingemacht und interval auf 1 gesetzt,aber der andere programm überschreibt das trozdem wenn er das lesen will schreibt der andere programm was andere rein,kann ich das blocken? das auf diese adresse nichts geschrieben werden kann nur von meinen programm aus?


DAnke



0012F0B6 12345678 xV4 << das schreibt mein prog,

das andere schreibt dann

0012F0B6 5644321 IE- <<< das andere programm

kann ich das blocken?

Dax 27. Dez 2005 14:25

Re: asm inline
 
Entziehe dem Bereich mit VirtualProtect die Schreibrechte. Aber wenn der Bereich tatsächlich auf dem Stack liegt (hi brechi ;)), dann endet das unter Umständen tödlich.

Was treibst du da eigentlich? *neugier*

UniPerson 27. Dez 2005 14:30

Re: asm inline
 
wie mache ich das? gibts dafür einen beispiel project?

kann ich das so machen das andere programme nur auf diese adresse lesen können und nur mein programm kann drauf schreiben?


danke

UniPerson 27. Dez 2005 16:11

Re: asm inline
 
habs doch noch geschafft,

aber das mit den

Delphi-Quellcode: markieren
asm
mov [$0012F0B89], $12345678 <<< wieso nur bis 8?
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 Uhr.
Seite 1 von 2  1 2      

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