Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 16:40

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

Advertisement



[ASM] Richtig komisches Problem

Discussion on [ASM] Richtig komisches Problem within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1

 
EasyFarm's Avatar
 
elite*gold: 281
Join Date: May 2011
Posts: 1,552
Received Thanks: 947
Question [ASM] Richtig komisches Problem

Hey. Ich habe in C++ ein Projekt für ein MMORPG gemacht. Es ist eine DLL, die im Spiel einiges ausliest wie Leben etc. aber auch andere Sachen automatisiert mittels ASM. So weit so gut. Das MMORPG läd DLL Dateien automatisch mit, wenn man die DLL im Ordner des Spieles hat, und sie in .mix statt .dll umbenennt. Alles funktioniert.
Nun mein Problem: Starte ich die DLL via Injector (Hab viele probiert), crasht das Spiel wenn man ingame ist (Ingame werden erst Timer etc. zum Auslesen aktiviert). Nun gut, also hab ich überall Messageboxen gemacht und geguckt worans liegt. Es liegt am Auslesen des Lebens, was als MIX Datei funktioniert. Mache ich ein __try davor, crasht das Spiel nicht, aber die Funktion gibt mir 0 aus. Also garnichts. Merke: Als Mix geht genau diese Funktion auch
Das komische: Alles andere, auch andere ASM Funktionen funktionieren. Auch wenn die die Funktion per Button aufrufe, nichts.
Hier ist die Funktion:

Code:
void GetHealth() {
        DWORD value;
	DWORD typ = 0x05;
	__asm {
   	MOV ECX, [Statuspointer]
	MOV EAX, [ECX + 05]
	MOV EDX, [EAX + 11]
	ADD ECX, 5
	PUSH typ
	CALL EDX
	MOV value, EAX
	}
}
Was ist damit los? Warum geht alles nur nicht diese Funktion wenn ich es injecte? Als Mix funktioniert das ja alles, auch das Auslesen des Lebens.
Es ist echt schwierig dieses Problem zu beschreiben..
Vielleicht kennt sich ja jemand aus. Vielleicht mache ich ja einen Fehler.

Danke sehr
Mfg. Easy
EasyFarm is offline  
Old 11/18/2014, 22:43   #2
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
debugger anwerfen und nachgucken.
vermutlich ist einer davon:
Code:
   	MOV ECX, [Statuspointer]
	MOV EAX, [ECX + 05]
	MOV EDX, [EAX + 11]
ungültig oder == 0.
von wo rufste denn auf, aus der dllmain?
evtl. da was nicht initialisiert/gültig weils als mix vom spielthread aufgerufen wird, beim injector aus dem remote thread.

kann es sein, dass die gethealth funktion i-wie ziemlich sinnfrei ist, speichert den wert in ner lokalen variable, gibt nix zurück oder aus O.o

und wieso benutzst du ü-haupt assembler, das meiste geht auch direkt mit c/c++ - und das viel sauberer.
Dr. Coxxy is offline  
Thanks
1 User
Old 11/18/2014, 22:45   #3

 
EasyFarm's Avatar
 
elite*gold: 281
Join Date: May 2011
Posts: 1,552
Received Thanks: 947
Hey

Doch hab nur den Teil wo die Funktion in einer Variable speichert rausgenommen zur Übersicht. Daran lags auch nicht.

Hier meine main.cpp:

Quote:
#include "linker.h"
#include <windows.h>




BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){

switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hinstDLL);
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Main, NULL, 0, NULL);

break;
}
return true;
}
Ich glaube es liegt auch daran, dass ich da was nicht initialisiere, denn auch eine andere Funktion gibt ohne einen Try einen Error (Als DLL), funktioniert aber dennoch.
Wie löse ich das denn am besten?
Könnte natürlich die Mix immer in den Ordner vom Spiel schicken per Launcher, aber injecten ist mir da lieber.

Mfg.
EasyFarm is offline  
Old 11/19/2014, 14:59   #4




 
bloodx's Avatar
 
elite*gold: 55
Join Date: Mar 2006
Posts: 4,582
Received Thanks: 1,539
Was für eine Funktion callst du ? __thiscall ?

MOV EDX, [EAX + 11]
ADD ECX, 5

nicht add edx, 5 ?

weil du veränderst ecx machst aber danach nichts mehr damit.

CreateThread wird so nicht benutzt - nimm lieber std::thread oder schau dir an wie man es richtig macht.
bloodx is offline  
Old 12/10/2014, 09:34   #5
 
elite*gold: 0
Join Date: Feb 2008
Posts: 125
Received Thanks: 17
Hast du schon probiert die Register in den stack zu pushen und vor dem beenden mit pop zurückzuschreiben?

Vielleicht standen in ECX oder EDX wichtige Werte.
nukeyou is offline  
Old 12/11/2014, 06:11   #6
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
1. wäre es durchaus hilfreich zu sagen, dass es sich um Metin2 handelt.
2. wäre es nicht sinnvoller dir einen Wrapper für die Funktion oder Klasse zu schreiben?
Tyrar is offline  
Old 12/11/2014, 15:03   #7



 
+Yazzn's Avatar
 
elite*gold: 420
Join Date: Jan 2012
Posts: 1,082
Received Thanks: 1,000
Versuch das ganze mal in etwa so: https://gist.github.com/anonymous/a1d15c59a60598ca6844
Verstehe nicht weshalb du das unbedingt mit asm machen willst.
+Yazzn is offline  
Thanks
1 User
Old 12/17/2014, 13:23   #8


 
buFFy!'s Avatar
 
elite*gold: 1826
Join Date: Mar 2009
Posts: 4,310
Received Thanks: 6,287
Inline ASM kannst du in den meisten Fällen vermeiden, solltest du auch unbedingt tun. std::function oder die oldschool typedefs (oder die neuen mit 'using') sind da ziemlich klasse.
Wie oben schon erwähnt wurde hast du hier wahrscheinlich einfach threading issues, dein crash liegt vermutlich einem invaliden TLS zugrunde. NtSetInformationThread kann dir da abhilfe schaffen, oder du hookst einfach nen Spielthread.

Thread-local storage ? Wikipedia
buFFy! is offline  
Old 12/18/2014, 09:57   #9
 
Mi4uric3's Avatar
 
elite*gold: 405
Join Date: Dec 2007
Posts: 6,615
Received Thanks: 6,358
Code:
Statuspointer
Wann & wie liest du den aus?
Ich gehe davon aus, dass du eine Art FindPattern benutzt?
Mi4uric3 is offline  
Reply


Similar Threads Similar Threads
Komisches Problem
10/29/2011 - Metin2 Private Server - 2 Replies
Hallo,folgendendes,ich bin lvl1,wenn ich mich auf lvl5 level und danach einen reboot bei meinen server mache bin ich wieder lvl1,das gleiche ist auch wenn ich mich per gm befehle im level steigere,nach einen reboot wieder altes level was kann das? MFG
Komisches Problem mit LWC
04/14/2011 - Minecraft - 6 Replies
Hallo zusammen, seit heute habe ich endlich LWC auf meinem Server, oder auch nicht? Folgendes Problem: Ich kann befehle in game geben, er erkennt sie auch, sagt mir das die kiste geschützt ist, aber dennoch kommt jeder an die kiste ran. Über die Info funktion lässt sich herausbekommen wer der owner is und ob ich zugang habe zur kiste oder nicht. Und gerade der Zugang steht nicht nur bei mir immer auf Yes - das steht auch bei nicht OPs auf yes. Mit anderen worten LWC funktioniert und...
Komisches Tp Problem !!! Need Help
03/30/2010 - Diablo 2 - 5 Replies
Hoi also ich kann keine Tps mehr aufmachen per rechtsklick, wenn man auf die rechte Seite Stadtportal gelegt hat so wie es der Bot tut. Was heißt er kann kein tp machen und bringt mir immer ne Fehlermeldung siehe Bild. Außerdem is mir aufgefallen das Ich 29 Tps immer dabei hab, obwohl nur 20 ins Buch passen, wenn ich alle aufgebraucht hab zeigt er mir immernoch 9 an. :mad: Einer ne idee wie ichs wieder hinbiegen kann http://img695.imageshack.us/img695/8726/blaqu.jpg
Komisches Problem
10/03/2009 - Diablo 2 - 3 Replies
ich habe gestern mein diablo 2 mal versucht zu installieren und seit dem werden alle meine chars als tot hc chars angezeigt. ( mit kutte) ausserdem sehe ich ingame meinen char den ich gerade spiele nicht mehr. ich sehe alles hämmer bo monster nur mein char ist unsichtbar. woran kann das liegen? ich krieg n fön ich hab kein bock windows nochmal neu zu machen kann mir plz einer helfen?
Komisches Problem
05/21/2007 - World of Warcraft - 12 Replies
Moinsen, Ich wollte euch kurz um Rat fragen.. Ich habe mir in den letzten 2 Wochen einen Paladin auf Level 19 gespielt/aufgemotzt (Teure Enchants etc)/PvP Gespielt. Nun macht mir der Paladin allerdings soviel Spass, dass ich ihn ganz gerne als Mainchar hochprügeln würde... Allerdings hätte ich ein schlechtes Gewissen bezüglich des Goldes für das Equip. Ich weiß nicht, ob ich das Gold extra für das PvP Equip wieder einmärzen kann... Und einen neuen Char will ich auch nicht machen (wäre dann...



All times are GMT +1. The time now is 16:41.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.