Per motivi di debug devo testare un puntatore per vedere se punta a una pagina leggibile valida. Attualmente sto analizzando/proc/[pid]/maps per vedere se l'indirizzo è mappato ok, ma questo sembra un po 'prolisso. C'è un modo migliore? Grazie.Come verificare se un indirizzo è leggibile nell'app dello spazio utente linux
risposta
Il modo canonico consiste nell'utilizzare la chiamata di sistema write()
per leggere dalla pagina (scrivendo in un descrittore di file fittizio pipe()
). Invece di errori, restituirà -1
con errno == EFAULT
se il buffer da scrivere non è leggibile.
Grazie, questo funziona a meraviglia! – gimmeamilk
Attenzione: ho visto almeno un'altra soluzione SO suggerire di utilizzare/dev/null per questo scopo (http://stackoverflow.com/questions/4611776/isbadreadptr-analogue-on-unix), ma i nuovi kernel (ho testato il 3.8 .7) return success per/dev/null write() anche se 'buf' è NULL. Quindi, anche se questo test potrebbe funzionare con/dev/null su qualsiasi sistema si stia testando, non è sicuramente una soluzione portatile. L'utilizzo di qualche altro file fd (come un dummy pipe o un oggetto posix shm) non sarebbe altrettanto veloce, ma sarebbe sicuramente più sicuro e più portabile. – etherice
- 1. Come accedere alla memoria dello spazio utente dal kernel Linux?
- 2. Verificare se una directory è leggibile
- 3. Come verificare se un indirizzo e-mail è falso?
- 4. Come verificare se un indirizzo è un indirizzo commerciale o residenziale
- 5. Come verificare se un testo è tutti i caratteri dello spazio bianco sul lato client?
- 6. Come verificare se un file esiste ed è leggibile in C++?
- 7. Come verificare se esiste un utente postgres?
- 8. C++ Indirizzo IP forma leggibile
- 9. Sharepoint: verificare se un utente è membro di un gruppo
- 10. Come verificare se esiste un indirizzo e-mail?
- 11. Come mmap un buffer del kernel Linux nello spazio utente?
- 12. Come scoprire se un indirizzo di Ethereum è un contratto?
- 13. Come verificare se il testo di UITextField è un indirizzo email valido?
- 14. Linux: come verificare se un'unità è montata su nfs
- 15. Come verificare se la stringa è uno spazio dei nomi
- 16. Come verificare se il supporto Linux SSE2
- 17. Caricatore ELF per spazio utente Linux
- 18. Verificare se un utente è disconnesso in progettazione
- 19. Come posso verificare se è lo stesso utente in ASP.NET?
- 20. Controlla se una stringa è un indirizzo email in PHP
- 21. Come verificare se un indirizzo IP è l'host locale su un sistema multi-homed?
- 22. Gestione interrupt Linux nello spazio utente
- 23. Posso verificare se esiste un indirizzo email usando .net?
- 24. come trovare l'utilizzo dello spazio su disco per utente?
- 25. Come posso verificare se questo utente è anonimo o in realtà un utente sul mio sistema?
- 26. Come verificare se il GUID è zero
- 27. Come verificare se un indirizzo IP è all'interno di una particolare sottorete
- 28. Come posso verificare se un indirizzo e-mail è valido senza inviare nulla ad esso?
- 29. Verificare se è un oggetto
- 30. Come verificare ASP.NET se l'utente è online?
Sto eseguendo l'analisi di '/ proc/self/maps' pure –
@GregoryPakosz: Per essere una soluzione generica e affidabile, non richiederebbe ricaricare e riorganizzare la mappa ad ogni controllo per tenere conto delle cose come un mucchio crescente o segmenti di memoria appena mappati? – etherice
@etherice: No perché/proc è autoaggiornante; ogni volta che si accede a un file/proc, viene eseguito il codice del kernel che rigenera il suo "contenuto". – kaiwan