|
You last visited: Today at 01:01
Advertisement
[ASM] Access Violation
Discussion on [ASM] Access Violation within the C/C++ forum part of the Coders Den category.
12/11/2014, 23:26
|
#1
|
elite*gold: 964
Join Date: Mar 2008
Posts: 2,629
Received Thanks: 1,636
|
[ASM] Access Violation
Hey da das alte Problem beseitigt ist und ich nicht denke das mir dort jemand weiter helfen würde.
Es gibt nun aber ein anderes Problem. Und dies Betrifft eine Zugriffsverletzung über ASM.
Wenn ich folgenden Code ausführe gibt es keine Probleme:
Code:
__asm
{
mov eax, dword ptr ds : [aTime];
mov dword ptr ds : [eax], 255;
}
WriteProcessMemory(cHandle, (LPVOID)aTimeSub, &stopTimer, sizeof(char), 0);
Wenn ich aber diesen Ausführe gibt es die Zugriffsverletzung:
Code:
__asm
{
mov eax, dword ptr ds : [aTime];
mov dword ptr ds : [eax], 255;
mov eax, ds : [aTimeSub];
mov byte ptr [eax], 0x00;
}
dabei wird an die Selbe stelle geschrieben wie über WriteProcessMemory().
Ich weiß das es andere möglichkeiten gibt. Ich möchte aber ASM benutzen.
Deswegen bitte ich euch mir wenn möglich einen weg über ASM zu zeigen oder wie ich Zugriffsverletzung umgehen kann
Vielen Dank.
Benhero
|
|
|
12/12/2014, 08:12
|
#2
|
elite*gold: 966
Join Date: Apr 2010
Posts: 1,104
Received Thanks: 681
|
Das solltest du weiter ausführen.
Nach "mov eax, ds : [aTimeSub];" steht der Wert von aTimeSub, also die Adresse, die auch in WPM benutzt werden würde, in eax. Das folgende "mov byte ptr [eax], 0x00;" sollte an die Adresse den Wert 0 schreiben (das gleiche würde auch WPM tun, sofern stopTimer eine char-Variable mit dem Wert 0 ist). Ich sehe da keinen Fehler, aber korrigier mich, wenn ich gerade einen Denkfehler mache.
Hab das mit folgendem Beispielcode auch nochmal überprüft:
Code:
int x = 15; // repräsentiert das, was der TE verändern will
int* xPtr = &x; // repräsentiert TE's aTimeSub
__asm
{
mov eax, ds : [xPtr]; // adresse von x ist nun in eax
mov dword ptr [eax], 22; // x = 22
}
std::cout << x; // Output: 22
Aus dem Thread geht nicht hervor, dass mit WPM versucht wurde den eigenen Prozess zu manipulieren. "cHandle" kann ja auch ein externer Prozess sein. In diesem Fall sollte ja klar sein, dass es nicht klappt. Ich gehe aber mal davon aus, dass man cHandle in der WPM-Zeile ohne weiteres mit GetCurrentProcess substituieren kann.
Funktioniert WPM denn? Im Falle eines Fehlers würde WPM ja nicht zum Crash führen, sondern einfach FALSE returnen und den LastError entsprechend setzen.
Mit freundlichen Grüßen
Jeoni
|
|
|
12/12/2014, 14:45
|
#3
|
elite*gold: 964
Join Date: Mar 2008
Posts: 2,629
Received Thanks: 1,636
|
WPM Funktioniert. Und ja man könnte auch GetCurrentProcess() verwenden. (cHandle = currentHandle). Durch WMP wird der Wert auf 0 gesetzt. Ja "stopTimer" ist ein char wert.
In diesem Fall ein unsinged char
aTimeSub ist bei WMP wie auch bei der ASM anweißsung der Selbe. Es ist für mich ja möglich einen Wert über ASM zu schreiben. Diese Anweißung hier funktioniert ohne Absturz:
Code:
mov eax, dword ptr ds : [aTime];
mov dword ptr ds : [eax], 255;
ledeglich das Schreiben eines einzelnen Bytes über "mov byte ptr [eax], 0x00" verurascht den problem.
Bei dir ist es ja wieder ein DWORD.
Und nein. Du hast keinen Denk fehler. Ledeglich gibt es eine wie oben bereits geschrieben "Zugriffsverletzung beim Schreiben" auf die Adresse von aTImeSub.
Aber eben nur beim ASM versuch.
Ich hoffe ich habe alles aufgegriffen.. o.o
Grüße
|
|
|
12/12/2014, 20:18
|
#4
|
elite*gold: 58
Join Date: Jun 2008
Posts: 2,311
Received Thanks: 8,420
|
Wenn ich nicht ganz falsch liege, musst du zuerst VirtualProtect ausführen, um die gewünschte Region auf beschreibbar zu ändern.
Das müsste deinen Fehler eigentlich beheben.
Padmak
|
|
|
12/12/2014, 23:25
|
#5
|
elite*gold: 964
Join Date: Mar 2008
Posts: 2,629
Received Thanks: 1,636
|
Ahhh okay. Also z.B
Hoffe es funktioniert danke @Padmak
Grüße
|
|
|
12/12/2014, 23:37
|
#6
|
elite*gold: 420
Join Date: Jan 2012
Posts: 1,030
Received Thanks: 981
|
Denke ich auch. Kümmert sich WriteProcessMemory nicht automatisch um so Zeug?
|
|
|
12/13/2014, 00:39
|
#7
|
elite*gold: 964
Join Date: Mar 2008
Posts: 2,629
Received Thanks: 1,636
|
Glaube ich schon. Da ich mit WPM keine probleme habe. Aber eben über ASM
Grüße
|
|
|
12/14/2014, 02:42
|
#8
|
elite*gold: 420
Join Date: Jan 2012
Posts: 1,030
Received Thanks: 981
|
Hast du es jetzt ausprobiert? Funktioniert es?
|
|
|
12/14/2014, 18:38
|
#9
|
elite*gold: 964
Join Date: Mar 2008
Posts: 2,629
Received Thanks: 1,636
|
Nein, habe ich aktuell noch nicht.
Arbeite gerade an einer Externen Version.
Werde die DLL aber bald weiter entwickeln.
Grüße
|
|
|
|
Similar Threads
|
Access violation
04/17/2014 - C/C++ - 12 Replies
Hey, bin momentan daran ein Programm zu coden, darin muss ich in einem Spiel ein Mob anvisieren, sofern alles gut, er visiert die Mobs korrekt an etc.
Mein Problem liegt daran das wenn ich ein Mob anvisieren möchte und kurz davor jemand anderes den Mob killt das mein Programm und das Game abstürzen, habs mir schon im Debugger angekuckt, komme damit aber auch nicht viel weiter, hab nur herausfinden können das es mit dem anvisieren zu tun hat.
Hab auch schon versucht kurz vor dem anvisieren zu...
|
C++ Detour - Access Violation
10/19/2011 - C/C++ - 1 Replies
Hallo,
ich versuche zur Zeit ein eigenes Detour mit Hilfe dieser http://www.elitepvpers.com/forum/gamehacking-tutor ials/518465-c-eigene-detours-teil1.html Anleitung zu basteln. Ziel ist es bei jedem Call einer bestimmten Funktion eine Messagebox auszugeben.
Leider klappt das irgendwie nicht wie es soll, denn es tritt immer eine Acces Violation auf nachdem meine Messagebox angezeigt wurde. Meine Vermutung ist, nach Stepping in Olly, dass sich die Registers durch meine Funktion ändern. Das...
|
[question] memcpy, access violation
10/02/2011 - General Coding - 1 Replies
is it ok to type cast byte buffer by (void*)?
DWORD dwAddress = 0x12345678;
BYTE bPatch = { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 };
memcpy( (void*)dwAddress, (void*)bPatch, 7);
this piece of my code was working fine till now - it is causing ACCESS VIOLATION and I can't figure out why.
edited:
nvm, it was all about memory protection.
|
Help with my error log: NeuzUnique access violation
01/29/2011 - Flyff Private Server - 0 Replies
How can I fix this error?
It pops when logging with my char.
2011/ 1/29 11:30:31 Feb 22 2010 05:50:57 1 rCnt=1
NeuzUnique.exe caused an EXCEPTION_ACCESS_VIOLATION in module NeuzUnique.exe at 001B:0066E686
- Registers
EAX=09F2DF00 EBX=7FFDE000 ECX=09F2DFFE EDX=09F2DFFE ESI=00000000
|
Access violation at address 00000000
07/19/2009 - Grand Chase - 5 Replies
Every time I run the ryu engine with the correct setting I get the problem, Access violation at address 00000000. Read of address 00000000. PLEASE help me.
|
All times are GMT +2. The time now is 01:01.
|
|