Not a member yet? Register for your free account!

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 23:37

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

 

Inline Asm -> Wert aus Register in anderes Register schreiben

Reply
 
Old   #1
 
elite*gold: 0
The Black Market: 4/0/0
Join Date: Jul 2010
Posts: 423
Received Thanks: 163
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




Last edited by MaxMilimeter; 03/15/2012 at 21:35.
MaxMilimeter is offline  
Old   #2
 
elite*gold: 5
The Black Market: 0/0/0
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
 
elite*gold: 0
The Black Market: 0/0/0
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 ];


Last edited by yihaaa; 03/15/2012 at 20:55.
yihaaa is offline  
Old   #4
 
elite*gold: 0
The Black Market: 4/0/0
Join Date: Jul 2010
Posts: 423
Received Thanks: 163
@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.




Last edited by MaxMilimeter; 03/15/2012 at 21:37.
MaxMilimeter is offline  
Old   #5
 
elite*gold: 0
The Black Market: 0/0/0
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
 
elite*gold: 0
The Black Market: 4/0/0
Join Date: Jul 2010
Posts: 423
Received Thanks: 163
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?


Last edited by MaxMilimeter; 03/15/2012 at 21:53.
MaxMilimeter is offline  
Old   #7
 
elite*gold: 0
The Black Market: 0/0/0
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
 
elite*gold: 0
The Black Market: 4/0/0
Join Date: Jul 2010
Posts: 423
Received Thanks: 163
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
 
elite*gold: 0
The Black Market: 0/0/0
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
 
elite*gold: 0
The Black Market: 4/0/0
Join Date: Jul 2010
Posts: 423
Received Thanks: 163
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



« Previous Thread | Next Thread »

Similar Threads
Register -.-
Hallo! Ich habe mein register script zum laufen bekommen und auch den Text in der Datenbank aufegführt (als master) und mssql ist bei xampp auch...
3 Replies - Flyff PServer - Discussions / Questions
Wtf? Register?
Hello, I have a problem, I want to make a privateserver, but my problem is... If I put my registerpage in my wamp, I dont see the page... ...
11 Replies - Flyff PServer - Discussions / Questions
Float Wert Schreiben
und zwar sonst schreib ich immer mein Wert so in VB2008 Memory.Writememory(p(0), &H6473850, "300", "4") aber da ich jetzt eine Float Typ...
7 Replies - General Coding
register
is this right, if I want to enter register page on the vps? because when I do it, it can't get it. http://195.46.39.44/register.php
2 Replies - CO2 PServer - Discussions / Questions
I cant register
I cant register on the new cabal8 site (world of cabal) and there is some new thing called super password what's that!? Also when i click regiter a...
3 Replies - Cabal Main - Discussions / Questions



All times are GMT +2. The time now is 23:37.


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

Support | Contact Us | FAQ | Advertising | Privacy Policy
Copyright ©2015 elitepvpers All Rights Reserved.