Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14
  1. #1

    Standard [S] TuT für Pointer in CE

    Hi. Ich suche ein Tutorial über Pointer von CeatEngiene, am besten videotut mit sprache. Habe nichts brauchbares bei TY und in der Sufu gefunden...

    Danke

  2. #2
    CIH-Virus Avatar von krusty
    Registriert seit
    12.10.2008
    Beiträge
    445

    Standard

    Also erstmal sind Pointer nicht von CheatEngine, sondern kommen in Programmen vor.
    Wenn du mit CheatEngine nach einem Wert suchst, hat dieser eine Adresse im Speicher. Dummerweise ist diese Adresse nur selten statisch, das bedeutet sie verändert sich wenn man das Programm neu startet.
    Da helfen sogenannte Pointer (Zeiger).
    Ein Pointer sitzt selber an einer bestimmten Adresse und zeigt auf eine Adresse:
    0x0001 ich bin ein pointer und zeige auf die adresse 0x0002
    0x0002 ich bin ein Wert, z.B. Munition = 100
    Du siehst, der Pointer befindet sich an der Adresse 0x0001 und zeigt auf die Adresse 0x0002, welche den Wert der Munition beinhaltet.

    Wenn man das Programm neu startet kann es sein, dass sich die Adresse der Munition ändert,
    das ist aber nicht schlimm, wir fragen einfach unseren Pointer:
    0x0001 ich bin ein pointer und zeige auf die adresse 0x1337
    0x1337 ich bin ein Wert, z.B. Munition = 100
    Dummerweise ändern sich auch die Adressen der Pointer. Wir versuchenn einen Multilevel-Pointer zu erstellen:
    0x0001 ich bin ein Pointer, der auf die Adresse 0x0002 zeigt
    0x0002 ich bin ein Pointer, der auf die Adresse 0x0003 zeigt
    0x0003 ich bin ein Pointer, der auf die Adresse 0x1338 zeigt
    0x1338 ich bin der Wert der Munition = 100.
    Man spricht von einem Multilevelpointer, weil wir an den Wert der Munition nur dich eine Verkettung von Pointern gelangen:
    Pointer1 = 0x0001
    Pointer2 = Inhalt von Pointer1 auslesen
    Pointer3 = Inhalt von Pointer2 auslesen
    MunitionsAdresse = Inhalt von Pointer3 auslesen
    MunitionsWert = Inhalt von MunitionsAdresse auslesen

  3. #3

    Standard

    Das grund wissen habe ich jetzt verstanden, danke.

    Aber wieviele Pointer habe ich in z.b. Counter strike source?

  4. #4

    Standard

    //Push

  5. #5
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Zitat Zitat von Tw0F1sh Beitrag anzeigen
    Das grund wissen habe ich jetzt verstanden, danke.

    Aber wieviele Pointer habe ich in z.b. Counter strike source?
    Wenn du das nicht selber beantworten kannst hast du offenbar gar nichts verstanden.
    Sind natürlich 42 Stück.

    Ernsthaft: Pointer werden da verwendet, wo man Daten referenziert. Das passiert vor allem exzessiv dort, wo man mit dynamisch angefordertem Speicher arbeitet.
    Spiele brauchen offensichtlich einen großen Pool davon. Ebenso ist es oft geschickter beim Aufruf von Funktionen die Parameter in Form von Pointern zu übergeben, was auf das Konzept "Call by Reference" führt. Ansonsten müssten nämlich beim Funktionsaufruf die gesamten Daten erst kopiert werden. Wenn eine Funktion also nur mit den Daten arbeiten soll und diese nicht ändert, oder insbesondere diese Daten ändern _soll_, so übergibt man Pointer.
    Die Zahl der Pointer hängt also zumal davon ab, wie das Spiel programmiert wurde (soll heißen: wie viel Gebrauch die Programmierer von Pointern gemacht haben) und welche Funktionen gerade ausgeführt werden, d.h.:
    Es werden aktuell X Pointer benutzt. Funktion A ruft Funktion B auf. Funktion B braucht Y Pointer. Schon hast du effektiv X+Y Pointer. Dann wird Funktion B beendet und es gibt wieder nur X Pointer.
    Long story short: die Anzahl der Pointer ändert sich im Laufe des Programms ständig und du wirst sicher nicht wissen können, wozu die alle gut sind. Es kann dir also scheiß egal seien, wie viele es davon gibt. Sprich: 42 Stück.

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  6. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Cristhecrusader (11.11.2011)

  7. #6
    Stanley Jobson Avatar von Bi0sh0k
    Registriert seit
    17.12.2007
    Beiträge
    773

    Standard

    Ich beschäftige mich auch schon eine weile damit, aber leider passierts immer wieder das ein Multilevelpointer nicht funzt. Manchmal hat man ja mehrere 100 Adressen die als Pointer fungieren könnten. Bei den grün angezeigten soll es sich ja um Basis Adressen handeln, aber wie ich die genau einordnen soll weiß ich auch nicht genau. Manchmal funzen meine Multilevelpointer für immer, manchmal nicht. Hatt da wer vielleicht noch ne Idee wie man es besser machen könnte. Ich hab mir letztens auch ein Tut über Assembler von dieser Seite gezogen: http://tuts4you.com/download.php?list.17
    Ich will mich etwas enger damit beschäftigen, aber die Pointer wie oben genannt sind mir manchmal noch ein Rätsel, auch wenn ich die funktionsweise einigermaßen verstanden habe. Woran erkenne ich das ich die richtige Adresse wähle um darauß einen Pointer mit dem Offset zu machen?

    Pointer+Offset=
    Pointer+Offset=
    Pointer+Offset=
    Pointer+Offset=
    usw.
    Adresse mit Wert

    _______________________________

    GFX Showroom
    Klick mich!
    _______________________________



  8. #7
    CIH-Virus Avatar von krusty
    Registriert seit
    12.10.2008
    Beiträge
    445

    Standard

    ein Pointer ist standartmäßig ein Zeiger auf einen bestimmten Platz im Speicher. Das kann ein Wert sein, das kann aber auch ein Objekt oder eine Struktur sein.
    Bei Spielen zeigt so ein Zeiger meist auf den Anfang einer Struktur. Meistens steht der Inhalt, den man haben möchte nicht an erster Stelle in der Struktur, also nicht direkt an der Stelle, auf die der Pointer zeigt, sondern etwas weiter hinten. Desshalb addiert man ein offset zur Adresse:
    Das sei ein Speicherauszug aus einer Struktur der Spielfigur:
    Code:
    0x00000001 'K'
    0x00000002 'R'
    0x00000003 'U'
    0x00000004 'S'
    0x00000005 'T'
    0x00000006 'Y'
    0x00000007 0
    0x00000008 1337
    Wir haben einen Pointer x, der auf 0x00000001 zeigt, wir wollen aber nicht den Namen der Spielfigur auslesen, sondern das Leben (1337), das steht genau 7 Bytes unter 0x00000001, also an 0x00000001 + 0x7.
    Leben = Lese_Inhalt_aus( Lese_Inhalt_aus(x) + 0x7)

  9. #8

    Standard

    ch beschäftige mich auch schon eine weile damit, aber leider passierts immer wieder das ein Multilevelpointer nicht funzt. Manchmal hat man ja mehrere 100 Adressen die als Pointer fungieren könnten. Bei den grün angezeigten soll es sich ja um Basis Adressen handeln, aber wie ich die genau einordnen soll weiß ich auch nicht genau. Manchmal funzen meine Multilevelpointer für immer, manchmal nicht. Hatt da wer vielleicht noch ne Idee wie man es besser machen könnte. Ich hab mir letztens auch ein Tut über Assembler von dieser Seite gezogen: http://tuts4you.com/download.php?list.17
    Ich will mich etwas enger damit beschäftigen, aber die Pointer wie oben genannt sind mir manchmal noch ein Rätsel, auch wenn ich die funktionsweise einigermaßen verstanden habe. Woran erkenne ich das ich die richtige Adresse wähle um darauß einen Pointer mit dem Offset zu machen?
    Das problem ahbe ich auch. Wenn ich immer mit CE die werte ändere, dann funzt alles, übertrage ich die Adresse in ein z.B. C++ Programm dann funzt sie net mehr...

  10. #9
    CIH-Virus Avatar von krusty
    Registriert seit
    12.10.2008
    Beiträge
    445

    Standard

    Ihr müsst auf die Base-Adressen der Module achten, die können sich ändern, wenn das Programm neu gestartet wird.
    In CE steht sowas : "Client.dll" + 0x1337.
    Ihr müsst also die Baseadress von der Client.dll auslesen und 0x1337 dazu addieren.

  11. #10
    Stanley Jobson Avatar von Bi0sh0k
    Registriert seit
    17.12.2007
    Beiträge
    773

    Standard

    Genau das hatte ich ja.
    Eine Base Adresse (grün dargestellt) die, die aus der Client.dll hervorgeht die dann ein offset bekommen hat um auf die richtige adresse zu zeigen mit dem wert. doch komischerweise hat sich diese geändert. 0.o

    _______________________________

    GFX Showroom
    Klick mich!
    _______________________________



Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. [Memory] Adressen, Pointer ecetera
    Von ir0n im Forum C, C++
    Antworten: 3
    Letzter Beitrag: 07.08.2009, 04:05
  2. Metin2 Pointer addys finden?
    Von 0knower im Forum Games
    Antworten: 0
    Letzter Beitrag: 24.01.2009, 14:14

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •