मैं हैक करने का प्रयास कर रहा हूँ पर स्मृति का उपयोग नहीं कर सकते हैं/nullfs कर्नेल मॉड्यूल (FreeBSD पर) को समझने के लिए इतना है कि अंत करने के लिए, मैं निम्न करें:FreeBSD मॉड्यूल डिबगिंग - पता
लक्ष्य मशीन पर: kldstat
देता है :
Id Refs Address Size Name
1 10 0xffffffff80200000 17e10c8 kernel
2 1 0xffffffff819e2000 4cf0 vmxnet.ko
3 1 0xffffffff819e7000 16e0 echo.ko
4 1 0xffffffff81c11000 23dc vmmemctl.ko
5 1 0xffffffff81c14000 641b nullfs.ko
nm /boot/kernel/nullfs.ko | grep mount
00000000000018f0 t null_getwritemount
0000000000000540 t nullfs_mount
0000000000000930 t nullfs_unmount
U vfs_mountedfrom
U vop_getwritemount_desc
स्थानीय मशीन है जो एक नामित पाइप एक सीरियल कंसोल के रूप में अभिनय (मैं आभासी मशीनों का उपयोग कर रहा) के माध्यम से लक्ष्य को जोड़ता है पर:
(kgdb) tr0
kdb_sysctl_enter (oidp=<value optimized out>, arg1=<value optimized out>,
arg2=0xfffffe004e7cc7f0,
req=<value optimized out>) at /usr/src/sys/kern/subr_kdb.c:446
446 kdb_why = KDB_WHY_UNSET;
Current language: auto; currently minimal
(kgdb) getsyms
During symbol reading, Incomplete CFI data; unspecified registers at
0xffffffff8099497a.
Id Refs Address Size Name
1 10 0x80200000 17e10c8 kernel
2 1 0x819e2000 4cf0 vmxnet.ko
3 1 0x819e7000 16e0 echo.ko
4 1 0x81c11000 23dc vmmemctl.ko
5 1 0x81c14000 641b nullfs.ko
Select the list above with the mouse, paste into the screen
and then press ^D. Yes, this is annoying.
5 1 0x81c14000 641b nullfs.ko
add symbol table from file
"/usr/obj/usr/src/sys/AIJAZ-DEBUG/modules/usr/src/sys/modules/nullfs/nullfs.ko.debug"
at
.text_addr = 0x81c14000
.data_addr = 0x81c14000
.bss_addr = 0x81c14000
(kgdb) add-kld nullfs.ko
add symbol table from file "/boot/kernel/nullfs.ko.symbols" at
.text_addr = 0xffffffff81c14000
set_sysinit_set_addr = 0xffffffff81c15c90
set_sysuninit_set_addr = 0xffffffff81c15cb0
.rodata.str1.1_addr = 0xffffffff81c15cc8
set_modmetadata_set_addr = 0xffffffff81c15e48
set_sysctl_set_addr = 0xffffffff81c15e58
.data_addr = 0xffffffff81c15e60
.bss_addr = 0xffffffff81c16360
(y or n) y
Reading symbols from /boot/kernel/nullfs.ko.symbols...
location expression too complex...done.
(kgdb) b nullfs_mount
Cannot access memory at address 0x81c14540
जैसा कि कोई ऊपर 'एनएम' और 'kldstat' के आउटपुट से देख सकता है, पते वास्तव में उचित हैं।
मैं भी ऊपर दिए गए पते पर एक "हार्डवेयर ब्रेकप्वाइंट" सेटिंग की कोशिश की:
(kgdb) hbreak *0x81c14540
Hardware assisted breakpoint 1 at 0x81c14540: file
/usr/src/sys/modules/nullfs/../../fs/nullfs/null_vfsops.c, line 74.
(kgdb) c
Continuing.
Warning:
Cannot insert breakpoint 1.
Error accessing memory address 0x81c14540: Input/output error.
इस बार हालांकि, हालांकि ब्रेकप्वाइंट पंजीकृत किया गया है, यह कभी नहीं डाला जाता है। लिनक्स पर इस त्रुटि की खोज करने पर, ऐसा लगता है कि कर्नेल कॉन्फ़िगरेशन के हिस्से के रूप में CONFIG_DEBUG_RODATA को बंद करके का ख्याल रखा गया है (प्रति link इस तरह के एक सुरक्षा तंत्र के रूप में प्रतीत होता है जो पता लगाता है कि टेक्स्ट अनुभाग कुछ कारणों से कर्नेल ओवरराइट किया जा रहा है)। यह सॉफ्टवेयर ब्रेकपॉइंट्स की सेटिंग में मदद करता है जो अन्यथा सेट नहीं किया जाएगा। मुझे नहीं पता कि यह कारण भी है।
दूसरा, मैं जानना चाहता हूं कि लक्ष्य पर वास्तविक पते 0xffffffff00000000
से ऊपर हैं, डीबगर केवल निम्न 8 बिट्स की रिपोर्ट करता है। ऐसा इसलिए है क्योंकि इसे समझा/माना जाता है?
इच्छुक तुम से सुनने के लोगों