Vorrei poter collegare un indirizzo fisico e leggere i dati memorizzati a quell'indirizzo.Leggere la memoria fisica in Windows 8
Sotto Linux, vorrei utilizzare /dev/mem
per acquisire questi dati. Sotto Windows 8, non sono sicuro di quale meccanismo sia disponibile per farlo.
Il mio caso d'uso è l'ispezione di un dispositivo PCI Express. Il dispositivo PCI Express crea un ring buffer ad un indirizzo conosciuto, che posso determinare dalla BAR PCIe. Una volta che questo indirizzo è stato impostato, non cambierà fino al riavvio del computer.
Attualmente, posso utilizzare le applicazioni come RW Everything per visualizzare i dati lì, ma mi piacerebbe poterlo fare senza l'interazione dell'utente (senza la GUI) in modo da avere meno problemi con i buffer dell'anello che si stanno spostando prima che io possa accedere ai dati.
Qualcuno sa se c'è una chiamata di sistema di Windows privilegiata che posso fare da userspace (ad mmap una regione per esempio) o devo usare un modulo del kernel personalizzato per fare questo? Immagino che ci sia un modo per farlo senza un modulo del kernel personalizzato, perché non credo di averne installato uno quando ho installato RW Everything.
@AndrewMedico: Tranne che per una cosa. L'obiettivo effettivo di quell'utente è quello di leggere la memoria di un processo. Quindi ha a che fare con la memoria virtuale e tutto ciò che comporta. Non ne ho bisogno. La memoria a cui voglio accedere è bloccata in posizione. –
Avresti bisogno di un driver del kernel (e diritti di amministratore per installarlo), come WinIO, trovato qui: http://www.internals.com/ (con sorgente). Se hai solo bisogno di leggere i dati SMBIOS (nel tuo caso PCI), è mappato nel registro qui: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ mssmbios \ Data e forse è abbastanza buono, oppure puoi anche usare l'API WMI o Windows: http://msdn.microsoft.com/en-us/library/windows/desktop/ms724259(v=vs.85).aspx –