Not a member yet? Register for your free account!

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 06:13

  • Please register to post and access all features, it's quick, easy and FREE!

 

Inline Asm -> Wert aus Register in anderes Register schreiben

This is a discussion on Inline Asm -> Wert aus Register in anderes Register schreiben within the C/C++ forum part of the Coders Den category; Huhu, die Frage klingt vielleicht etwas Blöd, aber ich würde gerne wissen, wie ich den Wert eines Registers in ein ...

Reply
 
Thread Tools
Old   #1
 
Join Date: Jul 2010
Posts: 414
Received Thanks: 162
Question Inline Asm -> Wert aus Register in anderes Register schreiben

Huhu,
die Frage klingt vielleicht etwas Blöd, aber ich würde gerne wissen, wie ich den Wert eines Registers in ein anderes schreiben kann.

Wenn ich mov verwende wird lediglich die Speicheradresse auf das andere Register geschrieben und ich brauche den Wert in die Speicheradresse die mein Register hält.

Mein Inline Asm Code sieht folgendermaßen aus:
char *command;
[...]
code = "insert 1";
_asm {
mov edx, command;
};

Ist bestimmt einfach, wenn man weiß wie, aber bei Google findet man sogut wie garnichts nützliches über dieser "kleinen Fragen".

Danke im Voraus,
Max

__________________

MaxMilimeter is offline  
Old   #2
 
Join Date: Sep 2006
Posts: 385
Received Thanks: 217
"Fehler: 'command' nichtdeklarierter Bezeichner" sollte dir der Compiler um die Ohren hauen.

Was willst du denn überhaupt machen? Das gesamte code Array in das Register schreiben? Das ist nicht machbar. Was ist command?
Nightblizard is offline  
Old   #3
 
Join Date: Nov 2009
Posts: 343
Received Thanks: 45
Du musst auch das Semikolon hinter dem Befehl wegmachen.
Code:
__asm mov eax, edx;
oder so was?

Code:
char* c = "test";
__asm mov eax, dword ptr ds:[ c ];
yihaaa is offline  
Old   #4
 
Join Date: Jul 2010
Posts: 414
Received Thanks: 162
@Nightblizard: char *command; sollte es heißen, das ist nicht das Problem.
Also die Register halten ja Speicheradressen. Was wiederum in diesen Speicheradressen enthalten ist, sieht man in Ollydbg im 'Dump-Fenster' und im Stack. Und genau diesen Inhalt möchte ich durch meinen eigenen ersetzen.

@yihaaa: soweit bin ich ja schon, das ändert lediglich die Adresse die in meinem Register gespeichert ist.
Es geht auch mit Semikolons, aber wenn es so üblich ist, kann ich die bei mehreren Anweisungen später auch weglassen, danke für den Tipp.

__________________

MaxMilimeter is offline  
Old   #5
 
Join Date: Jul 2010
Posts: 388
Received Thanks: 195
Quote:
Originally Posted by MaxMilimeter View Post
Huhu,
die Frage klingt vielleicht etwas Blöd, aber ich würde gerne wissen, wie ich den Wert eines Registers in ein anderes schreiben kann.

Wenn ich mov verwende wird lediglich die Speicheradresse auf das andere Register geschrieben und ich brauche den Wert in die Speicheradresse die mein Register hält.

Mein Inline Asm Code sieht folgendermaßen aus:
char *code;
[...]
code = "insert 1";
_asm {
mov edx, command;
};

Ist bestimmt einfach, wenn man weiß wie, aber bei Google findet man sogut wie garnichts nützliches über dieser "kleinen Fragen".

Danke im Voraus,
Max
Ein Register hat nur einen Wert. Nichts anderes. Wenn das Register eine Adresse enthält kannst du über ptr auf den Wert an der Adresse zugreifen.

Code:
mov eax, dword ptr [ebx]
oder
mov eax, byte ptr [ebx]
usw
SmackJew is offline  
Old   #6
 
Join Date: Jul 2010
Posts: 414
Received Thanks: 162
Okay verstehe, aber wie kann ich dann den Wert einer Adresse durch den Wert einer anderen Adresse ersetzen?

Edit:
Um es nochmal zu veranschaulichen:
In Ollydbg lässt sich der Inhalt von Adressen im Dump-Fenster sehen. Dieser lässt sich über Rechtsklick->Binary->Edit bearbeiten. Wie bekomme ich das mit ASM zustande?
MaxMilimeter is offline  
Old   #7
 
Join Date: Jul 2010
Posts: 388
Received Thanks: 195
Quote:
Originally Posted by MaxMilimeter View Post
Okay verstehe, aber wie kann ich dann den Wert einer Adresse durch den Wert einer anderen Adresse ersetzen?
Code:
mov eax, adresse 1
mov ebx, adresse 2

mov eax, dword ptr [eax]
mov dword ptr [ebx], eax
SmackJew is offline  
Thanks
1 User
Old   #8
 
Join Date: Jul 2010
Posts: 414
Received Thanks: 162
Danke, das scheint schonmal ein Ansatz zu sein, allerdings werden irgendwie nur die ersten 4 Zeichen meines Strings kopiert und ein Teil des alten bleibt erhalten, wie bekomme ich den Rest rüber? :P
MaxMilimeter is offline  
Old   #9
 
Join Date: Jul 2010
Posts: 388
Received Thanks: 195
Quote:
Originally Posted by MaxMilimeter View Post
Danke, das scheint schonmal ein Ansatz zu sein, allerdings werden irgendwie nur die ersten 4 Zeichen meines Strings kopiert und ein Teil des alten bleibt erhalten, wie bekomme ich den Rest rüber? :P
Ein String ist nichts anderes als eine Reihenfolge von Bytes (ein ASCII char ist 1 Byte groß) im Speicher die mit einem Nullbyte abgeschlossen wird. Ein 32bit Register hat eben nur 32 Bit = 4 Byte = dword. Wenn du den String in deinem Programm speichern möchtest weise die Adresse des ersten Bytes einem Zeiger zu. Für genauere Infos musst du schon damit rausrücken was du machen möchtest, aus deinem OP geht jedenfalls nicht viel hervor.
SmackJew is offline  
Old   #10
 
Join Date: Jul 2010
Posts: 414
Received Thanks: 162
Könntest du mir da vielleicht einpaar Befehle und wenn möglich ein kurzes Beispiel geben?
In Google findet man zu wenig über ASM.

Also mein Spiel sendet Pakete. Nun soll ein bestimmtes Paket durch mein eigenes ersetzt werden.

Die Pakete sehen in der Regel so aus:
say text
walk 94 23 24 23

Ein say hallo soll dann zum Beispiel in say bye geändert werden (müsste ja mit einer einfachen If Abfrage klappen oder?) und ich bin jetzt dabei erstmal das Paket zu ersetzen.
MaxMilimeter is offline  
Reply

Thread Tools

Similar Threads
Thread Thread Starter Forum Replies Last Post
Register -.- Phillor Flyff PServer - Discussions / Questions 3 11/14/2010 13:45
Wtf? Register? DopeFlyff Flyff PServer - Discussions / Questions 11 11/14/2010 11:38
Float Wert Schreiben chesar General Coding 7 08/21/2010 19:46
register xStylo CO2 PServer - Discussions / Questions 2 06/16/2010 11:03
I cant register Tonic16 Cabal Main - Discussions / Questions 3 05/31/2008 18:55



All times are GMT +1. The time now is 06:13.


Powered by vBulletin®
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.