|
You last visited: Today at 10:58
Advertisement
Byte Variable Problem
Discussion on Byte Variable Problem within the C/C++ forum part of the Coders Den category.
12/18/2011, 07:06
|
#1
|
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
|
Byte Variable Problem
Hallo.
Ich schreibe an einem programm, das mit der funktion "WriteASM" einen Byte in eine Bestimmte Addresse schreiben soll.
Dieser Byte, soll aus einer EditBox ausgelesen werden.
In die Editbox soll nun z.B. FD, FE, FC oder irgendein Byte geschrieben werden.
Dann soll WriteASM eben diesen byte so übernehmen und in die Addresse schreiben.
Mein problem ist, dass ich nicht weiß wie ich das anstellen soll :S
Wenn ich es so mache:
Code:
MessageBoxA(0,"Jetzt sollte Combo Beschrieben werden.","Yeah!",MB_ICONINFORMATION);
int combo = GetDlgItemInt(hwndDlg,IDC_EDIT1,0,0); //Hier sollte der Byte ausgelesen, und in Combo geschrieben werden.
WriteASM(ADR_COMBO, (DWORD)(PBYTE)combo, 1); //Nach dieser Zeile stürzt der Prozess ab :S
MessageBoxA(0,"Jetzt sollte Combo Beschrieben sein.","Yeah!",MB_ICONINFORMATION);
Stürzt der Prozess ab.
|
|
|
12/18/2011, 09:59
|
#2
|
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
|
GetDlgItemText(...)
wcstoul(...)
writeprocessmemory(...)
siehe msdn
getdlgitemint holt eine dezimalzahl aus der dialogbox, das sind aber hexadezimalzahlen.
musst dir also den text holen, den als hex behandeln und umwandeln, und das dann reinschreiben.
wie deine WriteASM funktion aussieht weiß ich nicht, vermute aber mal, dass damit asm befehle geschrieben werden können und keine einzelnen bytes, dafür solltest du writeprocessmemory oder wenn du im programm bist memcpy benutzen.
|
|
|
12/18/2011, 19:07
|
#3
|
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
|
Also in meinem Beispiel, soll eine zahl zwischen 1 und 50 reingeschrieben werden.
Und diese sollen dann auch so als byte beschrieben werden, also 0x50 oder 0x34 etc.
Tut mir leid wenn ich es falsch erklärt habe.
z.B. man schreibt 45 rein.
Dann soll die addresse mit "\x45" beschrieben werden.
Und hier die WriteASM funktion.
Code:
void WriteASM(DWORD dwAddy, DWORD dwASM, int len)
{
unsigned long Protection;
VirtualProtect((void*)dwAddy, len, PAGE_EXECUTE_READWRITE, &Protection);
memcpy((void*)dwAddy, (const void*)dwASM, len);
VirtualProtect((void*)dwAddy, len, Protection, NULL);
}
|
|
|
12/18/2011, 19:07
|
#4
|
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
|
Ein Byte ist eine zahl des bereichs 0..255, und das was du hast ist ein text (string).
trage den byte als byte ein und nicht als string und dann passt das
|
|
|
12/18/2011, 19:18
|
#5
|
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
|
Quote:
Originally Posted by warfley
Ein Byte ist eine zahl des bereichs 0..255, und das was du hast ist ein text (string).
trage den byte als byte ein und nicht als string und dann passt das
|
Das verstehe ich nicht ganz.
Also dass ein Byte in Decimaler(?) sicht 1-255 ist weiß ich.
Und ich habe gemacht, dass die Editbox nur Zahlen annimmt, weil wie gesagt nur ein byte bereich von 1 - 50 eingetragen werden soll.
1-50 in hexdecimaler sicht.
|
|
|
12/18/2011, 19:31
|
#6
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
|
Das Problem ist aber, dass GetDlgItemInt die Zahl als Dezimalzahl interpretiert! Hexadezimalzahlen werden nicht erkannt, die Buchstaben werden ignoriert!
|
|
|
12/18/2011, 19:39
|
#7
|
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
|
Quote:
Originally Posted by MrSm!th
Das Problem ist aber, dass GetDlgItemInt die Zahl als Dezimalzahl interpretiert! Hexadezimalzahlen werden nicht erkannt, die Buchstaben werden ignoriert!
|
Das ist schon klar.
12 oder 23 oder 50 ist ja in dem fall schon der byte in hexdecimaler sichtweise.
Es enthält keine Buchstaben, sondern nur 1-50.
Naja Smith du kennst doch in S4 die Combo Addresse.
Als byte hat diese standartmäßig den wert 01.
Und man kann ihn von 01 bis 50 ändern.
Und das möchte ich eben realisieren.
Ich möchte eine art Ingame Hack Panel per dlg box machen, weil d3d lw ist.
|
|
|
12/18/2011, 23:18
|
#8
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
|
Nein ich kenne sie nicht.
Quote:
12 oder 23 oder 50 ist ja in dem fall schon der byte in hexdecimaler sichtweise.
Es enthält keine Buchstaben, sondern nur 1-50.
|
Damit überspringst du aber die ganzen Buchstaben-Zahlen.
Oder meinst du, dass man eine Dezimalzahl eingeben soll? (also sie wird nicht als 0x23, sondern als 23 interpretiert)
Das wäre aber ein Widerspruch, zu deinen bisherigen Posts.
Du sagtest ja, wenn man 50 eingibt, wird 0x50 geschrieben.
Wird es aber eben nicht, sondern 0x32!
Aber das sollte nichts mit deinem Crash zu tun haben. Hast du mal geprüft, ob am Ende dort eine valide Instruction steht? Vielleicht beschädigst du sie, weil du an eine falsche Stelle schreibst.
|
|
|
12/18/2011, 23:35
|
#9
|
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
|
du vertauschst da wohl etwas, 50 in dezimal sind nicht 0x50 in hexa, sondern x32 (3*16+2*1)
|
|
|
12/18/2011, 23:39
|
#10
|
elite*gold: 0
Join Date: Dec 2009
Posts: 1,622
Received Thanks: 2,070
|
Hmm kann es sein dass ich gerade etwas falsch verstehe?
Also in Cheat Engine habe ich eine Addresse, die den Typ Array of Byte hat.
Dieser ist Standartmässig auf 01.
Wenn ich ihn z.B. auf 10 stelle wird im spiel, die Combo pro attacke mit 10 multipliziert.
wenn ich es auf 45 stelle, wird sie mit 45 multipliziert.
Und es hat ja den typ byte.
|
|
|
12/19/2011, 09:50
|
#11
|
elite*gold: 0
Join Date: May 2009
Posts: 827
Received Thanks: 471
|
Lass die Leute das halt gleich im Zehnersystem in die Editbox eingeben. Das sind wir eh eher gewohnt als das 16er. Der Computer speichert das eh dual. Von daher ist es egal ob du es im 10er, 12er, 16er, 124er System einliest. Dann hast du aber weniger Probleme. Wenn es unbedingt im 16er System sein soll, dann lese den Inhalt der Editbox als String ein und wandle den String z.B. mithilfe des Hornerschemas in eine Zahl zur Basis Zehn um.
|
|
|
12/19/2011, 12:39
|
#12
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,908
Received Thanks: 25,409
|
Quote:
Originally Posted by freehuntx
Hmm kann es sein dass ich gerade etwas falsch verstehe?
Also in Cheat Engine habe ich eine Addresse, die den Typ Array of Byte hat.
Dieser ist Standartmässig auf 01.
Wenn ich ihn z.B. auf 10 stelle wird im spiel, die Combo pro attacke mit 10 multipliziert.
wenn ich es auf 45 stelle, wird sie mit 45 multipliziert.
Und es hat ja den typ byte.
|
Weil CE es dezimal einliest und du übrigens auch.
Wenn man 50 eingibt, wird auch 50 geschrieben und nicht 0x50 und das ist ja auch absolut richtig so.
|
|
|
 |
Similar Threads
|
Cost of accessing a casted variable vs. assigning the casted variable? (C#)
01/05/2011 - CO2 Programming - 5 Replies
I know that in unmanaged C++, casting is at compile-time, so it's better to avoid the assignment and simply access it for all instances. However, in C#, I have no idea since I'm pretty new to it.
|
Überprüfen ob Variable Eine Variable ist
10/16/2010 - AutoIt - 26 Replies
Hey leute ich wollte fragen ob/wie man überprüfen kann
ob eine Variable eine Variable ist z.b. so
$k = 1
$i = $k
if $i = VARIABLE Then
msgbox(0,'$i ist eine variable!!','')
endif
PS:Wp releast man nochma TuT (z.b. für metin2??)
|
Problem error: Subscript used whit non-Array variable "
08/26/2010 - Last Chaos - 1 Replies
hey leute,
seitdem mein laptop ein windows update gemacht hat funktioniert der ultra bot nicht.
es dann kommt immer die fehlermeldung " error: Subscript used whit non-Array variable "
vor diesem update ging der bot noch.
|
[Problem] Inputbox(GUI) auslesen und als Variable speichern
08/08/2010 - AutoIt - 8 Replies
Hallo, ich bin neu hier und habe ein Problem mit Autoit
hier erstmal das Script :
#include <ButtonConstants.au3>
#include <EditConstants.au3>
|
Problem with public static byte Authenticate
06/10/2010 - CO2 Private Server - 1 Replies
database.cs line 1498
public static byte Authenticate(string UserName, string Password)
{
try
{
MySqlDataAdapter DataAdapter = new MySqlDataAdapter("SELECT * FROM `Accounts` WHERE `AccountID` = '" + UserName + "'", Connection);
DataSet DSet = new DataSet();
DataAdapter.Fill(DSet, "Account");
|
All times are GMT +1. The time now is 10:59.
|
|