Hey,
ich hätte da mal eine Frage.
Da mir geholfen wurde bei meinem ersten Hack habe ich immernoch nicht herrausgefunden wie man diesen Teil herrausfindet:
Quote:
*(BYTE*)ADR_XXXXXX = ***;
Also,
bei manchen Sachen steht BYTE bei manchen FLOAT usw... könnte mir mal jemand den Teil erklären^^? Kommt zwar nooblike rüber, aber fragen darf man ja wohl.
Obwohl der Speicherbedarf je nach Compiler etwas schwanken kann. Dabei wird aber immer eine Minimale-Größe eingehalten, die im Standard festgelegt wurde.
Der Zeiger selber hat keine Ahnung, wie groß der Speicher ist, auf den er zeigt. Er weiß nur, wie groß ein Element ist, was durch den Datentyp des Zeigers festgelegt wird. D.h. ein Element eines Zeigers vom Typ BYTE ist ein Byte groß. Ein Element eines Zeigers vom Typ int ist 4Bytes groß:
Code:
int* pInt = new int[5]; //pInt zeigt auf eine Speicherfolge von Integer-Werten, Gesamtspeicherbedarf: 5*4 = 20
int element1 = pInt[0]; //Erstes Element = 4Bytes groß; Speicherzellen 0-3
Über einen Integer-Zeiger hast du also immer nur Zugriff auf 4Speicherzellen. Das heißt folgendes:
Code:
int* pInt = new int[5];
int i1 = pInt[0]; //Speicherzellen 0-3
int i2 = pInt[1]; //Speicherzellen 4-7
...
Wie du siehst hast du nie direkten Zugrif auf eine einzelne Speicherzelle zum Beispiel Speicherzelle 2. Wenn du eine einzelne Zelle ansprechen möchtest, hilft nur ein unsigned char*-Zeiger (Entspricht BYTE):
Woher du weißt, welchen Zeiger-Typ du verwenden musst? Das erschließt sich aus dem, was du tun willst. WIllst du zum Beispiel einzelne Op-Codes ändern, nimmst du natürlich einen BYTE-Zeiger, weil die op-Codes genau 1Byte groß sind (0x0-0xFF) und damit genau in einer Speicherzelle Platz finden. Willst du Adressen ändern, auf die Pointer zeigen, dann verwendest du natürlich unsigned int (DWORD), weil eine Adresse (bei 32bit) genau 4Bytes groß ist. Usw.
Wer Fehler findet, darf verbessern.
Quote:
Weil ADR_XXXXXX scheinbar ein BYTE* ist.
Q:Warum ist der Ball rot?
A:Weil der Ball scheinbar rot ist.
Weil bool in C++ entweder 'true' oder 'false' ist und keine integer Zahl. Warum meinst du hat man in C++ so einen Datentyp als Standard eingeführt? Dass du dann weiter mit deinen Zahlen rumhantieren kannst? :-/ Das ist einfach nur schlechter Stil, falsch, und schlecht!
Furthermore:
Quote:
In Visual C++ 5.0 and later, bool is implemented as a built-in type with a size of 1 byte.
Quelle:
Jetzt rate mal, was passiert, wenn du einem 1Byte Datentyp einen 4Byte großen Wert zuordnest. Wahrscheinlich hat der Microsoft Compiler (bzw. jeder andere) aber auch für solche Fälle vorgesorgt und optimiert euren schlechten Code...
Es ist und bleibt aber dumm.
Der Compiler entscheidet wie viel Speicher er jeweils reserviert. Das meinte ich mit optimieren.
Quote:
Zudem wird true,false auch nicht mehr als irgend ein define auf 0 oder 1 sein weil spätestens wenns zu Maschinencode umgewandelt wird steht 0,1 dort.
false ist meistens als 0 definiert und true als ungleich 0. Und du arbeitest nicht mit Assembler, sondern mit C++! Nochmal die Frage an dich: Warum führt der !Standard! einen Datentyp mit eindeutig definierten Zuständen ein, wenn du diese dann misachtest? Das ist schlicht falsch und schlecht programmiert. Eine bool Variable ist entweder true oder false. Es ist doch egal, wie sie intern behandelt wird. Das ist btw. von Compiler zu Compiler unterschiedlich, weil der Standard das nicht eindeutig festlegt. Aber ich weise doch als vernünftiger Programmierer keiner bool-Variable einen Wert zu, dessen Zustand so nicht eindeutig definiert ist. Das ist doch Wahnsinn. I-wann kommst du auf die Idee Strings als Kette von Zahlen zu schreiben, weil der Computer später eh mit Zahlen arbeitet. Nur erwartet man als fremder Leser deines Codes nicht eine Aneinanderreihung von Zahlen, sondern einen lesbaren Text. Sonst kannst du gleich alles mit deinem Hex-Editor schreiben. Wozu dann noch ne Hochsprache mit Regeln? Frei nach deinem Motto: Der Computer arbeitet eh nur mit Zahlen... Warum nicht gleich alles binär eintippen?
Diese Regeln (Syntax) sollen dem Programmierer die Arbeit erleichtern, dass er sich nicht merken muss, ob 0 oder 1 jetzt true oder false ist. Sondern er merkt sich einfach entsprechende Schlüsselwörter. Deswegen hat C++ ja diesen Datentyp eingeführt, wohingegen C keinen solchen Datentyp kennt, was sicherlich oft genug zu Problemen geführt hat. Ich verstehe jetzt die Diskussion auch gar nicht. Akzeptiere doch einfach, dass es falsch, sprich schlecht, ist, wenn man einem Wahrheitswert direkt einen numerischen Wert zuweist, wenn es entsprechende Schlüsselwörter dafür gibt. Warum in Gottes Namen sollte man soetwas tun?
EDIT: Nur mal so als hypothetisches Beispiel:
Da true als ungleich 0 definiert ist, dkann ein Compiler, der den Standard beachtet, das Schlüsselwort 'true' als 0xFF definieren. Das macht wahrscheinlich kein Compiler, aber es ist möglich. Was passiert dann, wenn du deinem Wahrheitswert '1' zuweist? Undefiniertes Verhalten. Es kann alles passieren. Aber du hast schon Recht: Who cares. Ich mache btw. auch keine Zeilenumbrüche, ich meine, ist ja nicht mein problem, wenn niemand meinen Code versteht und lesen kann.
[Frage] Gibt es einen Trade Hack ? [Frage] 05/22/2011 - Metin2 Hacks, Bots, Cheats, Exploits & Macros - 5 Replies Ich weiß das ds nicht hier hin gehört aber , ich weiß nicht wo das sonst hinkommt . Also , gibt es einen Trade Hack ?