Jag skulle vilja kolla igenom minnet för en applikation. >Jag skulle vilja kolla igenom minnet för en applikation. Kan du visa nått exempel med ReadProcessMemory och WriteProcessMemory? Jag har kollat på dem i msdn men förstår inte riktigt hur man skall använda dem. Vad vill du göra. Finns nog bättre sätt än att läsa och skriva till processorns minne. ;O) Jag tänkte göra ett "triner"-program och kunna visa och ändra i minnet... >Kan du visa nått exempel med ReadProcessMemory och WriteProcessMemory? Söka efter ett värde (long) i minnet för t.ex. WINMINE Förstpr fortfarande inte exakt vad problemet är. Deklarerar funcktionen gör du väl såhär: Hur får man reda på hur mycket minne som processen använder?? Fuska på MSRöj... nu har det väl ändå gått för långt? det var bara ett exempel... Kolla in WinlOOk (den finns på Filarean under API-Windows). WinlOOk är gjort för att kunna manipulera Windowsfönster (nästan total makt över dom) det finns en knapp där det står "Search the memory of a Window" eller nå't sånt så kolla in den Subben så hittar du nog vad du söker efter.Kolla / ändra på minnet
Hur får jag området som applikationen använder om jag har dess TaskID (ProcID)
Kan jag använda CopyMemory för att kolla igenom allt?
Eller är minnet "Låst" på något sätt?
Går det att skriva till en annan applikations minne?Sv: Kolla / ändra på minnet
>Hur får jag området som applikationen använder om jag har dess TaskID (ProcID)
Först bör du ha klart för dig ungefär hur minnestilldelningen funkar. Varje process under Win32 har sitt eget virtuella minnesutrymme, där de kan styra och ställa som de vill i den 2 GB stora adressrymd de har tillgång till. Adresserna i det virtuella minnet är alltså inte verkliga minnesadresser, dem kommer du inte åt. Det betyder att en virtuell minnesadress bara är meningsfull inom den egna processen, och inte helt enkelt kan användas i andra processer.
>Kan jag använda CopyMemory för att kolla igenom allt?
Nej, CopyMemory fungerar bara i den egna processen. Kolla istället in funktionen ReadProcessMemory.
>Eller är minnet "Låst" på något sätt?
Läsa ska inte vara något problem, förutsatt att processen har behörighet till det under NT.
>Går det att skriva till en annan applikations minne?
Ja, med WriteProcessMemory. Men det är krångligare, eftersom en del minnessidor ör skrivskyddade.
MSSv: Kolla / ändra på minnet
Sv: Kolla / ändra på minnet
Sv: Kolla / ändra på minnet
Sv: Kolla / ändra på minnet
Nej, men om du specificerar exakt vad det är du inte förstår så kanske jag kan förklara.
MSSv: Kolla / ändra på minnet
visa resultaten i en lista, med adressen för värdet.Sv: Kolla / ändra på minnet
Declare Function ReadProcessMemory Lib "kernel32" ( _
ByVal hProcess As Long, _
ByVal lpBaseAddress As Long, _
Byref lpBuffer As Any, _
ByVal nSize As Long, _
ByRef lpNumberOfBytesRead As Long) As Long
hProcess är process handle till den process du vill läsa ifrån, som du får t.ex. med OpenProcess. lpBaseAddress är adressen i källprocessens virtuella minne du vill läsa ifrån, lpBuffer är en buffer i din egna process där resultatet ska lagras. nSize är hur många bytes du vill läsa och lpNumberOfBytesRead är hur mycket som verkligen lästes.
Om du nu vill söka efter ett speciellt 32 bits värde så är det väl smidigast att läsa en hyggligt stor bit minne på en gång (för att minska antalet funktionsanrop) in i en lokal Long array som du sedan loopar igenom.
MSSv: Kolla / ändra på minnet
Jag tänkte läsa ALLT minne till en array...Sv: Kolla / ändra på minnet
/Niklas JanssonSv: Kolla / ändra på minnet
jag tänkte mer på några större multiplayerspelSv: Kolla / ändra på minnet
Om inte kan du maila mig eller skriva det i forumet.