POINERRRR
-
Danke

-
SideWinder schrieb:
Den Wert der Adresse gezielt verändern geht erstmal gar nicht, das OS legt fest wo welche deiner Variablen gespeichert wird.
Wenn du allerdings meintest "Wert an der Adresse verändern", dann ist der *-Operator dein Freund:
int a = 0; int* p = &a; *p = 5; // a==5MfG SideWinder
also kann ich nicht während die cmd anwendung läuft zb die adresse eingeben und dann den wert ändern ?

-
iHofel schrieb:
ich würde jetzt gerne wissen wie man auf die Adresse zugreifen kann und ihren wert verändern ...

Hä, du willst die Adresse einer Variablen ändern? Da brauchst du schon einen Bagger und einen Kran.
-
Willst du etwas Bestimmtes erreichen? Oder fragst du "einach nur so"?
-
out schrieb:
iHofel schrieb:
ich würde jetzt gerne wissen wie man auf die Adresse zugreifen kann und ihren wert verändern ...

Hä, du willst die Adresse einer Variablen ändern? Da brauchst du schon einen Bagger und einen Kran.
nene xD nich mein ich gab die adresse ein und das programm greift auf die adresse zu und dann änder ich den wert der zahl !
-
iHofel schrieb:
SideWinder schrieb:
Den Wert der Adresse gezielt verändern geht erstmal gar nicht, das OS legt fest wo welche deiner Variablen gespeichert wird.
Wenn du allerdings meintest "Wert an der Adresse verändern", dann ist der *-Operator dein Freund:
int a = 0; int* p = &a; *p = 5; // a==5MfG SideWinder
also kann ich nicht während die cmd anwendung läuft zb die adresse eingeben und dann den wert ändern ?

Doch das geht auch, du kannst nur nicht die Adresse einer bestimmten Variable ändern. Den Wert einer bestimmten Adresse schon:
int* p = 0x....; *p = 5;Aber ich befürchte, das wird nicht das tun was du dir wünscht. Moderne Betriebssysteme haben virtuelle Speicheradressen, d.h. du bist deswegen noch lange nicht im RAM an Adresse 0x... und vor allem blockiert das Betriebssystem Speicherzugriffe auf fremde Prozesse, d.h. wenn du eine Adresse außerhalb deines eigenen Adressraums verändern willst wird dein Programm schlichtweg vom Betriebssystem beendet.
Wenn du Speicher von fremden Prozessen verändern willst musst du auf betriebssystemspezifische Funktionen zurückgreifen.
MfG SideWinder
-
iHofel schrieb:
nene xD nich mein ich gab die adresse ein und das programm greift auf die adresse zu und dann änder ich den wert der zahl !
Wie schon gesagt, du kannst die Adresse mit '*' dereferenzieren. Das wird aber in 99.99999999% aller Fälle abstürzen, sofern du nicht ganz genau weißt, was du da tust. Deine Fragen lassen vermuten, dass du nicht den leisesten Schimmer hast, was du da tust.
-
SideWinder schrieb:
iHofel schrieb:
SideWinder schrieb:
Den Wert der Adresse gezielt verändern geht erstmal gar nicht, das OS legt fest wo welche deiner Variablen gespeichert wird.
Wenn du allerdings meintest "Wert an der Adresse verändern", dann ist der *-Operator dein Freund:
int a = 0; int* p = &a; *p = 5; // a==5MfG SideWinder
also kann ich nicht während die cmd anwendung läuft zb die adresse eingeben und dann den wert ändern ?

Doch das geht auch, du kannst nur nicht die Adresse einer bestimmten Variable ändern. Den Wert einer bestimmten Adresse schon:
int* p = 0x....; *p = 5;Aber ich befürchte, das wird nicht das tun was du dir wünscht. Moderne Betriebssysteme haben virtuelle Speicheradressen, d.h. du bist deswegen noch lange nicht im RAM an Adresse 0x... und vor allem blockiert das Betriebssystem Speicherzugriffe auf fremde Prozesse, d.h. wenn du eine Adresse außerhalb deines eigenen Adressraums verändern willst wird dein Programm schlichtweg vom Betriebssystem beendet.
Wenn du Speicher von fremden Prozessen verändern willst musst du auf betriebssystemspezifische Funktionen zurückgreifen.
MfG SideWinder
ne ich will son ähnliche programm wie Cheat Eninge scripten deswegen will ich wissen wie man einen wert verändern kann und dazu braucht man ja ne adresse um den wert zu ändern oder ? ._.
-
Das habe ich mir schon gedacht, eine typische Wunschanwendung eines Anfängers. Ist aber auf Grund der Schutzmechanismen moderner Betriebssysteme alles andere als einfach zu implementieren.
Ich befürchte dieses Projekt wirst du noch eine gewisse Zeit aufschieben müssen.
MfG SideWinder
-
iHofel schrieb:
ne ich will son ähnliche programm wie Cheat Eninge scripten deswegen will ich wissen wie man einen wert verändern kann und dazu braucht man ja ne adresse um den wert zu ändern oder ? ._.
Lass es sein. Bei deinem Kenntnisstand hat das einfach keinen Sinn. Sorry, wenn ich das so direkt sage, aber so ein Tool erfordert wirklich *sehr gute* Kenntnisse von C++, evtl. sind Teile sogar in Assembler.
Lade dir doch die Sourcen von CheatEngine und schau mal, wie die das gemacht haben...
-
Und wenn ich admin bin ODER ich das Programm auf linux schreib ?

und warum schfft es dan cheat engine ?

-
iHofel schrieb:
und warum schfft es dan cheat engine ?

wie gesagt, lade dir die Sourcen und schau selbst nach
-
daddy_felix schrieb:
Lass es sein. Bei deinem Kenntnisstand hat das einfach keinen Sinn. Sorry, wenn ich das so direkt sage, aber so ein Tool erfordert wirklich *sehr gute* Kenntnisse von C++, evtl. sind Teile sogar in Assembler.
Assembler-Kenntnisse brauchst du nicht wirklich, ausgezeichnete C++-Kenntnisse auch nicht unbedingt. Aber es ist stark notwendig Grundlagen über die funktionsweise von Betriebssystemen zu kennen bzw. mit der dem OS zugehörigen System-API sauber umzugehen. Davon ist der OP noch weit entfernt.
Und wenn ich admin bin ODER ich das Programm auf linux schreib
Administrationsrechte benötigt dein Programm dann tatsächlich (afaik), aber auch auf Linux ist es nicht wesentlich simpler.
Was aber nicht heißt, dass es unmöglich ist, natürlich geht das.
und warum schfft es dan cheat engine ?
Höchstwahrscheinlich erfahrenerer Programmierer

MfG SideWinder
-
OK Passt mal auf ich will nicht AUF dem Betribsystem die Variablen Ändern ...
Sondern in meiner CMD anwendung
ZB. Wenn ich das hier schreib:
#include <iostream> #include <windows.h> #include <string> #include <stdlib.h> #include <cmath> using namespace std; int var = 123; int main () { cout << &var << endl; system("PAUSE"); return 0; }und dann will ich zb cin machen wo ich die adresse oder oberen var eingeb und dann änder ich den wert von 123 zb auf 4324 DAS mein ich ^^
(wundert euch nicht warum d soviel includes sind ich hab halt keine lust mir alle zu merken und hab eine Vorlage angefertigt ... :3)
-
Höchstwahrscheinlich erfahrenerer Programmierer --> Tjahh so erfahren will ich auch werden xDD
-
iHofel schrieb:
und warum schfft es dan cheat engine ?

Es ist ja nicht unmöglich. Man muss eben eine Anfrage an das Betriebssystem stellen, auf den fremden Prozessspeicher zugreifen zu dürfen. Das ist auch an sich nicht weiter schwierig. Man muss aber natürlich die entsprechenden Rechte haben.
Wir sagen nur, dass du es nicht kannst. Du weißt nicht einmal was ein Pointer zu benutzen ist, geschweige denn, wie virtueller Prozessspeicher funktioniert. Und das ist nur das absolut nötigste, um überhaupt etwas zu sehen. Um gezielt etwas zu ändern, da muss man auch verstehen, was man da tut, also wie das fremde Programm funktioniert.
-
Das ist mir bewusst. Der gesamte Speicher wird aber vom Betriebssystem kontrolliert und es schützt alle Adressen vor direktem Zugriff aus dem Ring 3 - bis auf die Adressen im Data-Segment der eigenen Applikation.
Du musst mit Hilfe einer OS-API-Funktion in einen inneren Ring kommen der die nötigen Rechte hat andere Adressen zu verändern.
Es ist sehr löblich, dass du ein erfahrenerer Programmierer werden willst, aber das wird man nicht dadurch, dass man sich ein für den derzeitigen Kenntnisstand viel zu schwieriges Projekt aussucht.
MfG SideWinder
-
SeppJ schrieb:
iHofel schrieb:
und warum schfft es dan cheat engine ?

Es ist ja nicht unmöglich. Man muss eben eine Anfrage an das Betriebssystem stellen, auf den fremden Prozessspeicher zugreifen zu dürfen. Das ist auch an sich nicht weiter schwierig. Man muss aber natürlich die entsprechenden Rechte haben.
Wir sagen nur, dass du es nicht kannst. Du weißt nicht einmal was ein Pointer zu benutzen ist, geschweige denn, wie virtueller Prozessspeicher funktioniert. Und das ist nur das absolut nötigste, um überhaupt etwas zu sehen. Um gezielt etwas zu ändern, da muss man auch verstehen, was man da tut, also wie das fremde Programm funktioniert.
ich weiß was sich pointer bringen -.- Zb Es gib Heap und Steak New und Delete Konstante Zeiger und es gibt auch Zeiger und Funktionen bla bla bla
-
LEUTE ich will nur die var in meinen kleinen CMD Programm ändern nicht auf dem betriebsystem -.-
-
iHofel schrieb:
LEUTE ich will nur die var in meinen kleinen CMD Programm ändern nicht auf dem betriebsystem -.-
Nein, du willst die eingegebene Adresse ändern und die liegt nunmal höchstwahrscheinlich NICHT innerhalb des Adressraums deines Programms.
Es ist schön, dass du weißt, was ein Zeiger in C++ ist, es fehlt dir aber schlichtweg das nötige Computer-Wissen dazu. Das kannst du dir erstmal sogar via Wikipedia beibringen.
Es hat keinen Sinn dir hier irgendeinen Copy&Paste-Code zu liefern. Wenn du diesen willst downloade ein OpenSource-Cheat-Programm und sieh dort nach.
int addr = 0; cin >> addr; int* ptr = static_cast<int*>(addr); *ptr = 5; // most probably crashWarum crash? Weil du eben doch außerhalb deines eigenen Programmes auf Speicher zugreifst, das Betriebssystem verhindert das. Glaub's mir. Das hat nichts mit "auf dem betriebssystem" zu tun.
MfG SideWinder