zeiger
-
int *pint = 0; int a = 34; pint = & a;jetzt hat pint die adresse von a,
kann ich aber auch zur laufzeit pint adressen zuteilen?
pint = & 0012FEC8;
einfach so egal ob dort ein anderes programm seine werte hat?sprich genau das was man eigentlich nicht will?
-
du könntest die Zuweisung vermutlich einbauen, aber nicht jeder Compiler wirds akzeptieren und so ziemlich jedes OS wird dir dein Programm mit einem segmentation fault o.ä. um die ohren hauen
-
bin mir nicht sicher aber wahrscheinlich nicht, trotzdem kann man ja einfach rausfinden, versuchs aus und sieh dann nach

-
pint = reinterpret_cast<int*>(0x12FEC8);
-
wenn ich jetzt irgendwas aus dem ram lesen möchte bekomme ich
Eine Ausnahme (erste Chance) bei 0x0041c0bd in pointerfun.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0x0000faaa.
ist ja eigentlich richtig, aber kann man das auch umgehen?
-
winapi, readprocessmemory (oder so aehnlich)
-
Gab's erst kürzlich:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-124560-and-highlight-is-.html
-
BOOL VirtualProtectEx(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flNewProtect,
PDWORD lpflOldProtect
);kann mir mal jemand sagen was das für parameter sind

gibt leider nur eine erklärung bei msdn die mir nichts sagt
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Funktion macht : "The VirtualProtectEx function changes the protection on a region of committed pages in the virtual address space of a specified process."
Funktion Parameter sind doch eigentlich klar :
hProcess : Handle zu dem Prozess in dessen Speicherbereich du die Zugriffsrechte auf einen Speicherblock verändern willst.
lpAddress : Addresse des Speicherbereichs
dwSize : Grösse des Speicherbereichs
flNewProtect : neue sicherheits/zugriffsrechte, wobei folgende werte gültig sind http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/memory_protection_constants.asp
lpflOldProtect : pointer auf variable welche die alten zugriffsrechte erhält die vorher eingestellt waren.
-
Moment mal, Leute!
Die Zuweisung selbst sollte doch eigentlich überhaupt keine Probleme machen.
Erst beim Zugriff wirds dann knallen.
Oder verpeile ich da grade was?
-
Die Adresse zuweisen kann man ohne Problem, das ist richtig. Nur beim Zugriff auf die Speicherstelle beschwert sich das Betriebssystem.
Um das nochmal explizit zu erwähnen: Nein, man kann nicht zufällig auf den Speicher eines fremden Programms haben indem man irgendwie eine "seiner" Adressen rausfindet. Dank virtuellem Speicher hat jeder Prozess seinen eigenen Adressraum von 2GB (0x00000000-0x7FFFFFFF).
Funktionen wie ReadProcessMemory arbeiten dann mit Adressen aus dem Adressraum des anderen Prozesses, die dort angegebenen Adressen stehen also auch nicht in Verbindung zu eigenen Adressen und können somit auch "doppelt" vorkommen. Mit ReadProcessMemory kopiert man also einfach einen Speicherbereich aus dem Adressraum des fremden Prozesses in dein eigenen.
Dieser Mechanismus wurde geschaffen, um eine größere Sicherheit durch Abschottung der Prozesse voneinander zu erzielen und trotzdem den Speicherverbrauch zu minimieren indem ReadOnly-Bereiche in den Adressraum mehrerer Prozesse gemappt werden können.
-
wie komme ich an ein handle von einem laufenden prozess?