Wert an einer addresse ausgeben
-
Auf meinem System geht folgendes:
unsigned int address; std::cin >> address; T* ptr = reinterpret_cast<T*>(address); std::cout << *ptr << std::endl;Aber je nach System muss man aufpassen, dass die Adressweite breit genug ist.
-
danke so was habe ich gesucht leider bekomme ich einige fehlermeldung T undecleared ptr undecleared expected > before * token expected ( before * token expected ) before ; tolen und die eingabe kann dann z.b. 0x000011 sein oder?
-
Die Eingabe muss in diesem Fall dezimal sein und für T solltest Du einen real existierenden Datentypen einsetzen, das T ist hier nur Platzhalter.
-
Hi,
für eine hexadezimale Eingabe musst Du einen Modifikator verwenden:
std::cin >> std::hex >> address;
-
also mal so:
1. das was du machen willst ist alles andere als sicher
2. mir wäre nicht bekannt das eine addresse mit 24 bit angegeben werden kann
3. wozu brauchst das? evtl. kannst das anders lösen, denn so kannst du schwerwiegende fehler auslösen.Edit: vergessen wie gesagt 24bit addressen sind mir ncht bekannt man nutzt in der regel 32bit addressen also zb 0x00998877. aber wie gesagt in den meisten fällen wirst du ne ausnahme auslösen weil du mit sicherheit eine zugriffsverletzung begehen wirst.
-
ich will von einem anderen programm einen wert auslesen
(ich will so eine art "informationsprogramm" machen)
und ich weiß die addresse wo sich dieser wert befindet.
ich habs jetzt so gemacht:#include <iostream> using namespace std; int main(){ unsigned int address; std::cin >> std::hex >> address; int* ptr = reinterpret_cast<int*>(address); std::cout << *ptr << std::endl; system("PAUSE"); return 0; }leider kommt dann fast immer senden oder nicht senden
-
Flashgott schrieb:
ich will von einem anderen programm einen wert auslesen
(ich will so eine art "informationsprogramm" machen)
und ich weiß die addresse wo sich dieser wert befindet.Dann ist diese Methode der falsche Weg. Moderne Betriebssysteme laden jeden Prozess in einen eigenen Adressraum. Du kannst nicht einfach so in den RAM einer andere Anwendung eingreifen. Dazu brauchst Du spezielle Funkionen des Betriebssystems und Systemberechtigungen.
-
ehh mom ein andres prog. also seperat gestartet? mit nem realmodesystem ginge es evtl. noch wenn du alle zugriffsbeschränkungen wegknallst aber bei einem PM kommst du nicht direkt es den speicher eines anderen programms das kannst auf dem weg vergessen. Denn in einem PM system bekommst jedes prog seinen eigenen viertuellen speicher und ist somit total von den anderen getrennt. da musst du über richtige programmbefewhle gehen, wenn sowas überhaupt geht weis das nicht genau.Edit: selbst ältere sachen wie dos 6.0/6.22 die nicht jedem programm einen eigenen addressraum geben haben dennoch schon schutzmechanismen integriert das solche zugriffe nur in fehler ausarten können und dos 4.x oder kleiner kannst das gern versuchen
Könnte möglich sein das da der speicher noch total unverwaltet ist
-
oelsni schrieb:
da musst du über richtige programmbefewhle gehen, wenn sowas überhaupt geht weis das nicht genau.
Es geht schon. Unter Windows gibt's dafür z.B. ReadProcessMemory. Aber dafür muss der eigene Prozess PROCESS_VM_READ-Rechte besitzen.
-
ahaa cool danke, hab das noch nie gemacht notier ich mir gleich wird sicher mal dazu kommen das auch ich das mal brauche