linux核心模組call trace格式解析

2021-10-06 08:19:18 字數 3092 閱讀 3296

今天測試編寫的核心模組進行檔案讀寫,結果失敗。通過dmesg檢視核心輸出,結果如下:

[37725.645804] i am here! and the user buf size is 1024

[37725.645812] the last data record position: 4096

current postion:0

[37725.645818] buff size 8

[37725.647660] bug: unable to handle kernel paging request at 0000000001955600

[37725.647690] ip: mid+0xc/0x80 [episode]

[37725.647696] pgd 8000000009f8b067 p4d 8000000009f8b067 pud 4df81067 pmd e0f8067 pte 8000000090fa0867

[37725.647711] oops: 0001 [#1] smp pti

[37725.649451] modules linked in: episode(oe) rfcomm bnep coretemp crct10dif_pclmul crc32_pclmul snd_ens1371 snd_ac97_codec ghash_clmulni_intel gameport ac97_bus snd_pcm pcbc snd_seq_midi snd_seq_midi_event aesni_intel aes_x86_64 vmw_balloon crypto_simd glue_helper cryptd intel_rapl_perf snd_rawmidi input_leds joydev serio_raw btusb btrtl btbcm snd_seq snd_seq_device snd_timer btintel bluetooth snd ecdh_generic soundcore shpchp i2c_piix4 vmw_vsock_vmci_transport mac_hid vsock vmw_vmci binfmt_misc parport_pc ppdev lp parport autofs4 hid_generic usbhid hid psmouse vmwgfx ttm drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops ahci drm mptspi libahci mptscsih mptbase e1000 scsi_transport_spi pata_acpi [last unloaded: episode]

[37725.649732] cpu: 0 pid: 17208 comm: a.out tainted: g oe 4.15.0-72-generic #81~16.04.1-ubuntu

[37725.649739] hardware name: vmware, inc. vmware virtual platform/440bx desktop reference platform, bios 6.00 07/02/2015

[37725.649761] rip: 0010:mid+0xc/0x80 [episode]

[37725.649768] rsp: 0018:ffffb94ac5697e28 eflags: 00010246

[37725.649777] rax: 0000000000000000 rbx: 0000000000000002 rcx: 0000000000000004

[37725.649783] rdx: 0000000000000000 rsi: 0000000001955600 rdi: ffffb94ac5697e5c

[37725.649789] rbp: ffffb94ac5697e90 r08: 0000000000000001 r09: 00000000000008cd

[37725.649795] r10: ffff8e9a5a8ff180 r11: 00000000000008cd r12: 0000000000000000

[37725.649801] r13: 0000000000000000 r14: 0000000000000000 r15: ffff8e9a5a8ff180

[37725.649809] fs: 00007f7c95277700(0000) gs:ffff8e9afa600000(0000) knlgs:0000000000000000

[37725.649814] cs: 0010 ds: 0000 es: 0000 cr0: 0000000080050033

[37725.649820] cr2: 0000000001955600 cr3: 000000000f48e003 cr4: 00000000003606f0

[37725.650020] call trace:

[37725.651102] ? episode_direct_write+0x13a/0x220 [episode]

[37725.652434] __vfs_write+0x1b/0x40

[37725.652458] vfs_write+0xb8/0x1b0

[37725.652467] ? do_sys_open+0x1b4/0x290

[37725.652477] sys_write+0x5c/0xe0

[37725.653225] do_syscall_64+0x73/0x130

[37725.653859] entry_syscall_64_after_hwframe+0x3d/0xa2

上面是擷取的一段內容。最後面的call trace顯示了出錯的地方的呼叫過程。

其中最後出錯在episode_direct_write函式。出錯的地方在0x13a,這裡指的是episode_direct_write編譯成機器碼後的長度為0x220位元組中的位置0x13a。

但要想確認到底錯在**了,就比較麻煩了。因為我不知道編譯成的機器碼長什麼樣,即使知道了,我可能也看不懂啊。

對於以下例子:

call trace:

[<123>] a+0x8/0x10

[<234>] b+0x0/0x10

a具體出錯的函式,0x10是a編譯成機器碼後的長度,0x8是出錯的指令在a裡的偏移。

Linux核心模組

核心模組 在整個啟動的過程中,是否能成功的驅動我們主句的硬體裝置,是核心完成的工作,而核心一般都是壓縮文件,在使用之前核心之前必須要將核心減壓到的記憶體中。為了應對日新月異的硬體,目前核心都具有可讀取模組化驅動程式的功能,也就是所謂的 modules模組化 所謂模組化。核心與核心模組放在 核心 bo...

Linux核心模組

1 核心模組註冊登出 塊載入函式有返回值,模組解除安裝函式無返回值。兩者都是無參函式,載入函式用 init修飾,解除安裝函式用 exit修飾。define init attribute section init.text define exit atrribute section exit,text...

Linux 核心模組

linux 核心模組程式結構 1 模組載入函式 2 模組解除安裝函式 3 模組許可證宣告 4 模組引數 5 模組匯出符號 6 模組作者等資訊宣告 模組載入函式 一般以 init 標識 在 linux 中,所有標識為 init 的函式如果直接編譯進核心,成為核心映象的一部分,在連線的時候都會放在 in...