2011-03-07 31 views
6

क्या कोई भी लिनक्स कर्नेल 2.6 के साथ/proc/pid/mem फ़ाइल को mmaping करने में सफल रहा है? मुझे एक ईएनओडीईवी (कोई ऐसी डिवाइस नहीं) त्रुटि मिल रही है। मेरे कॉल इस तरह दिखता है:एमएमएपी/proc/pid/mem

char * map = mmap(NULL, PAGE_SIZE, PROT_READ, MAP_SHARED, mem_fd, offset); 

और मैं जब निष्पादन इस कॉल में पहुँचता है, ऑफसेट ढेर शून्य से PAGE_SIZE के शीर्ष के मूल्य होता है,/proc/पीआईडी ​​/ नक्शे फ़ाइल जबकि डिबगिंग को देखकर सत्यापित किया है । मैंने ptrace के साथ भी सत्यापित किया है कि mmap ENODEV को गलत सेट कर रहा है।

उत्तर

17

proc_mem_operations in /usr/src/linux/fs/proc/base.c देखें: /proc/.../memmmap का समर्थन नहीं करता है।

+0

बहुत बहुत धन्यवाद! मुझे लगता है कि मेरे Ubuntu x86_64 में base.c फ़ाइल नहीं है - मेरा/usr/src dir खाली है। आप क्या विचलन कर रहे हैं? –

+0

@ अमिताई: आप 'लिनक्स-स्रोत' पैकेज इंस्टॉल कर सकते हैं या लिनक्स कर्नेल स्रोत को सीधे kernel.org से ला सकते हैं। उल्लिखित लिंक पर – ephemient

+0

त्रुटि 404 :( – ashish