日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

do_page_fault: epc == 00000000, ra == 00000000

發(fā)布時間:2025/4/16 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 do_page_fault: epc == 00000000, ra == 00000000 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

do_page_fault() #2: sending SIGSEGV to linux_stb for invalid read access from
00000000 (epc == 00000000, ra == 00000000)
因為缺少正確的$ra,linux gdb也無法顯示調(diào)用棧。
可能的原因很多,比如該線程的內(nèi)核棧被沖掉(可能性較少,因為內(nèi)核棧應(yīng)用層改不到)。
或者,該用戶線程執(zhí)行時把棧給沖掉了導(dǎo)致$ra為0,所以跳到0去執(zhí)行,導(dǎo)致epc為零。

應(yīng)對方法:
希望棧沒有被沖太多:0)
到do_page_fault()的地方,取得sp(r29)的值,然后顯示該用戶棧信息。

??????? printk("stack pointer: 0x%lx\n", regs->regs[29]);
??????? {
??????????? int i;
??????????? unsigned long * stack;

??????????? stack = (unsigned long *)regs->regs[29];
??????????? for(i = 0; i < 64; i ++)
??????????? {
??????????????? if(i % 4 == 0) printk("\n");
??????????????? printk("%08lx ", stack[i]);
??????????? }
??????????? printk("\n");
???????????
??????? }

比如:
00000000 00000000 00208000 004f3288
00799c60 004f330c 00000000 30590e44
30590df4 008b3918 008b3af0 004de850
00000000 30590e44 00001437 0020e0ff
00799c60 00000000 00000001 004eb8fc
00000000 00000000 00000000 00000000
00799c60 00000000 00000001 00000000

其中004xxxxx 005xxxxx ... 依賴于程序代碼段大小,多數(shù)是棧中保留的函數(shù)返回地址。
然后objdump -DS app.out
不難找到一些棕絲馬跡。
?

轉(zhuǎn)載于:https://blog.51cto.com/jiangjqian/772549

總結(jié)

以上是生活随笔為你收集整理的do_page_fault: epc == 00000000, ra == 00000000的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。