精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

截獲Linux操作系統(tǒng)異常處理

系統(tǒng) Linux
在某些情況下,我們可能需要去截獲Linux操作系統(tǒng)的一些異常處理,比如截獲page fault異常處理。如果我們能夠修改內核,那么截獲page fault異常處理就會非常簡單。但是有些情況下,我們不能直接修改內核代碼,需要在已經編譯好的內核上完成截獲功能。

  在某些情況下,我們可能需要去截獲Linux操作系統(tǒng)的一些異常處理,比如截獲page fault異常處理。

  可以修改內核的情況下:

  如果我們能夠修改內核,那么截獲page fault異常處理就會非常簡單。以linux 3.8.0內核為例,系統(tǒng)中發(fā)生page fault之后,會進入page fault異常處理,調用do_page_fault函數(shù)。do_page_fault的代碼如下:

  1. dotraplinkage void __kprobes 
  2. do_page_fault(struct pt_regs *regs, unsigned long error_code) 
  3. exception_enter(regs); 
  4. __do_page_fault(regs, error_code); 
  5. exception_exit(regs); 

  我們把do_page_fault函數(shù)的內容提取出來,寫成一個新的函數(shù)default_do_page_fault。再增加一個函數(shù)指針do_page_fault_handler,初始化為default_do_page_fault。將原來的do_page_fault內部改為調用函數(shù)指針do_page_fault_handler。修改之后的代碼如下:

  1. void 
  2. default_do_page_fault(struct pt_regs *regs, unsigned long error_code) 
  3. exception_enter(regs); 
  4. __do_page_fault(regs, error_code); 
  5. exception_exit(regs); 
  6. EXPORT_SYMBOL(default_do_page_fault); 
  7. typedef void (*do_page_fault_handler_t)(struct pt_regs *, unsigned long); 
  8. do_page_fault_handler_t do_page_fault_handler = default_do_page_fault
  9. EXPORT_SYMBOL(do_page_fault_handler); 
  10. dotraplinkage void __kprobes 
  11. do_page_fault(struct pt_regs *regs, unsigned long error_code){ 
  12. do_page_fault_handler(regs, error_code); 

  由于do_page_fault_handler被EXPORT_SYMBOL導出,我們在內核模塊中可以很方便地訪問它。只要將do_page_fault_handler的值設置為自定義的page fault異常處理函數(shù),就能完成截獲功能。如果想要恢復原來的異常處理函數(shù),只需要再次把do_page_fault_handler設置為default_do_page_fault即可。

  不能修改內核的情況下:

  但是有些情況下,我們不能直接修改內核代碼,需要在已經編譯好的內核上完成截獲功能。

  開始的時候,我考慮在do_page_fault函數(shù)開始處插入跳轉代碼,跳轉到自定義的page fault處理函數(shù)中。但是實踐的時候發(fā)現(xiàn),內核不允許直接修改do_page_fault的代碼。

  經過一番調查,又想到一個新的辦法,即通過更改IDT表的方式來截獲page fault。

  內核原有的IDT表肯定是不能直接寫的,所以我申請了一個頁,將原來的IDT表復制過來,再更改頁面異常對應的ISR(Interrupt Service Routine)。page fault的ISR名稱為page_fault,它將寄存器壓棧,將error number壓棧,然后調用do_page_fault,待do_page_fault返回之后再恢復寄存器,退出異常處理。

  在Linux內核中,ISR是用匯編寫的。例如,x86_64 Linux的ISR源碼位于內核源碼arch/x86/kernel/entry_64.S中,X86_32的位于arch/x86/kernel/entry_32.S中。如果去讀entry_64.S或者entry_32.S,你會發(fā)現(xiàn)這兩個文件非常復雜,利用了很多的匯編宏和宏定義,無法方便地基于它們寫一個自定義的ISR出來。

  我的解決辦法是將內核編譯出來,反匯編vmlinux.o,然后查找page_fault,找到其匯編代碼。下面的匯編代碼就是linux-3.8.0 X86_64內核的:

  1. ffffffff8136f6f0 <page_fault>
  2. ffffffff8136f6f0:       66 66 90                data32 xchg %ax,%ax 
  3. ffffffff8136f6f3:       ff 15 07 0a 2b 00       callq  *0x2b0a07(%rip)        # ffffffff81620100 <pv_irq_ops+0x30> 
  4. ffffffff8136f6f9:       48 83 ec 78             sub    $0x78,%rsp 
  5. ffffffff8136f6fd:       e8 ae 01 00 00          callq  ffffffff8136f8b0 <error_entry> 
  6. ffffffff8136f702:       48 89 e7                mov    %rsp,%rdi 
  7. ffffffff8136f705:       48 8b 74 24 78          mov    0x78(%rsp),%rsi 
  8. ffffffff8136f70a:       48 c7 44 24 78 ff ff    movq   $0xffffffffffffffff,0x78(%rsp) 
  9. ffffffff8136f711:       ff ff 
  10. ffffffff8136f713:       e8 1f 2e 00 00          callq  ffffffff81372537 <do_page_fault> 
  11. 11 ffffffff8136f718:       e9 33 02 00 00          jmpq   ffffffff8136f950 <error_exit> 
  12. 12 ffffffff8136f71d:       0f 1f 00                nopl   (%rax) 

  我仿照著寫了一個,名為my_page_fault:

  1. asmlinkage void my_page_fault(void); 
  2. asm("   .text"); 
  3. asm("   .type my_page_fault,@function"); 
  4. asm("my_page_fault:"); 
  5. //the first 3 bytes of the routine basically do nothing, 
  6. //but I decide to keep them because kernel may rely on them for some special purpose 
  7. asm("   .byte 0x66"); 
  8. asm("   xchg %ax, %ax"); 
  9. asm("   callq *addr_adjust_exception_frame"); 
  10. asm("   sub $0x78, %rsp"); 
  11. asm("   callq *addr_error_entry"); 
  12. asm("   mov %rsp, %rdi"); 
  13. asm("   mov 0x78(%rsp), %rsi"); 
  14. asm("   movq $0xffffffffffffffff, 0x78(%rsp)"); 
  15. asm("   callq my_do_page_fault"); 
  16. asm("   jmpq *addr_error_exit"); 
  17. asm("   nopl (%rax)"); 

  其中第9行addr_adjust_exception_frame是(pv_irq_ops+0x30)地址處存儲的值;第11行addr_error_entry是error_entry的地址;第16行addr_error_exit是error_exit的地址。這幾個值需要從System.map文件中查詢,然后用內核模塊參數(shù)的形式傳入。而my_do_page_fault則是我們自己定義的page fault處理函數(shù)。

  如果需要截獲X86_32的page fault,可以參考這個C文件。不過需要注意的是,新版內核有所變動,這里的代碼需要根據自己的情況做一些調整。

  有了自定義的ISR之后,就可以將這個ISR填到IDT中,加載新的IDT表之后,自定義的page fault處理函數(shù)就開始發(fā)揮作用了。這個過程主要有以下幾個步驟:

  • 用store_idt(&default_idtr)保存現(xiàn)有的IDT寄存器值
  • 從default_idtr中讀出IDT表首地址和表的大小
  • 申請一個頁面
  • 將原來的idt表拷貝到新申請的頁面中
  • 利用pack_gate將my_page_fault(注意不是my_do_page_fault)填入到對應的IDT項中
  • 在idtr中填寫新的IDT表地址和大小,用load_idt(&idtr)加載新的IDT表到當前CPU
  • 利用smp_call_function,將新的IDT表加載到其他CPU上。

  如果想恢復原來的IDT表,則用load(&default_idtr)和smp_call_function加載原來的IDT表,釋放申請的頁面。

  讀完文章之后,可以參考我的github中的代碼:https://github.com/RichardUSTC/intercept-page-fault-handler

責任編輯:黃丹 來源: 博客
相關推薦

2009-12-09 17:25:19

Linux操作系統(tǒng)

2010-04-08 17:56:42

Unix操作系統(tǒng)

2020-12-29 16:39:01

Linux代碼命令

2009-12-14 17:46:40

Linux桌面操作系統(tǒng)

2010-04-29 14:08:38

Unix操作系統(tǒng)

2013-12-12 17:03:57

Lua腳本語言

2009-12-16 09:43:12

Linux操作系統(tǒng)

2014-09-10 09:54:43

2009-12-22 13:44:33

Linux操作系統(tǒng)

2014-07-28 17:25:25

國產Linux

2011-01-10 16:34:13

linux安裝

2009-12-23 10:11:49

Linux操作系統(tǒng)

2010-02-26 14:13:51

Linux操作系統(tǒng)

2009-12-17 14:10:37

Linux操作系統(tǒng)

2009-12-21 17:18:45

Linux操作系統(tǒng)

2009-12-23 17:47:15

Linux操作系統(tǒng)

2013-12-30 10:05:54

Linux操作系統(tǒng)

2009-12-10 17:27:19

Linux操作系統(tǒng)

2009-12-10 11:01:16

Linux操作系統(tǒng)

2009-12-15 11:42:57

Linux操作系統(tǒng)
點贊
收藏

51CTO技術棧公眾號

日韩一区二区免费高清| 国产精品毛片久久久久久| 久久久久久国产| 人妻少妇精品视频一区二区三区 | 亚洲精品成人少妇| 国产日本一区二区三区| 久久午夜鲁丝片午夜精品| 日韩中文av| 91精品国产综合久久精品| 久久黄色片视频| 男人在线资源站| 欧洲亚洲视频| 在线观看国产精品网站| 久草免费福利在线| av电影在线观看网址| 高清久久久久久| 国产精品美女午夜av| 日本特黄特色aaa大片免费| 日韩久久电影| 国产视频自拍一区| 国产成人精品一区二区三区在线观看| 992tv免费直播在线观看| 国产精品99久久久久久宅男| 日本午夜在线亚洲.国产| 免费成年人视频在线观看| 欧美一区二区三区婷婷| 无码av中文一区二区三区桃花岛| 中文字幕一区二区三区乱码| 暖暖视频在线免费观看| av在线不卡网| av在线不卡一区| 一本色道久久综合无码人妻| 美女黄网久久| 91精品国产电影| 精品无码m3u8在线观看| 亚洲女同一区| 北条麻妃在线一区二区| 91狠狠综合久久久久久| 九九热精品视频在线观看| 日韩电影中文 亚洲精品乱码| av7777777| 黄色av免费在线看| 99久久亚洲一区二区三区青草| 91在线无精精品一区二区| 最新国产中文字幕| 日本中文字幕不卡| 国产精品黄视频| 波多野结衣mp4| 日日嗨av一区二区三区四区| 国产91精品高潮白浆喷水| 国产无套粉嫩白浆内谢| 激情丁香综合| 性欧美视频videos6一9| 午夜毛片在线观看| 99国内精品| 在线观看中文字幕亚洲| 国精产品一区一区三区免费视频 | 日韩欧美国产综合一区| 91丝袜超薄交口足| www一区二区三区| 日韩一级片网站| 午夜性福利视频| youjizz亚洲| 日韩av网址在线| 免费在线观看你懂的| 亚洲永久精品唐人导航网址| 亚洲全黄一级网站| 国产激情av在线| 97人人精品| 欧美黑人一级爽快片淫片高清| 久久久久久久福利| 国产精品美女久久久| 国产不卡在线观看| 一卡二卡三卡在线观看| 国产精品1区二区.| 精品国产一区二区三区麻豆小说| 青青草在线免费视频| 国产亚洲精品久| 在线观看欧美亚洲| 欧洲一区二区三区| 国产色91在线| 一区二区在线不卡| 欧美人与性动交α欧美精品图片| 亚洲成av人片| 国产超碰在线播放| 秋霞影院一区| 日韩电影网在线| 视频国产一区二区| 亚洲毛片在线| 国产精品久久视频| 亚洲av综合色区无码一区爱av| av网站一区二区三区| 午夜视频久久久| 黄色污污视频在线观看| 色婷婷综合久久久久中文一区二区| 中文字幕第100页| youjizz欧美| 中文字幕国产亚洲| 日本熟妇成熟毛茸茸| 日韩精品乱码免费| 成人av资源网| av资源种子在线观看| 一区二区视频免费在线观看| 任你操这里只有精品| 9l视频自拍九色9l视频成人| 中文字幕欧美日韩| 日韩久久久久久久久| 久久精品免费观看| 久久99热只有频精品91密拍| 中文字幕中文字幕在线中高清免费版| 欧美性少妇18aaaa视频| 被黑人猛躁10次高潮视频| 久久亚洲精品人成综合网| 精品成人私密视频| 天堂а√在线中文在线鲁大师| 一本久道久久综合狠狠爱| 成人国产精品免费视频| 免费黄网站在线观看| 亚洲一区在线观看网站| 欧美中日韩在线| 国产黄色精品| 欧美精品久久天天躁| 自拍视频一区二区| 国内一区二区三区| 91欧美激情另类亚洲| h视频网站在线观看| 精品久久香蕉国产线看观看亚洲| 亚洲天堂一区二区在线观看| av伊人久久| 欧美在线视频观看免费网站| 天天干天天操天天操| av激情亚洲男人天堂| 久久视频免费在线| 9999精品免费视频| 日韩中文字幕国产| 中文字幕一区二区人妻痴汉电车| 麻豆91在线播放| 日本在线成人一区二区| 伊人久久国产| 亚洲精品白浆高清久久久久久| 久久久精品视频在线| 国产在线播放一区三区四| 国产精品国产三级国产专区53| 日韩毛片久久久| 欧美三片在线视频观看| 麻豆免费在线观看视频| 偷拍欧美精品| 亚洲综合在线做性| 亚洲91av| 亚洲成人教育av| 日本三级2019| 91在线一区二区| 欧美日韩在线中文| 蜜桃一区二区三区| 国产精品久久97| 日本www在线观看| 欧美一区二区三区成人| 国产精品老熟女一区二区| 国产成人无遮挡在线视频| 日韩极品视频在线观看| 老司机精品视频在线播放| 91av视频在线| 大胆av不用播放器在线播放 | 美女视频久久黄| 国产suv精品一区二区69| 一区二区三区在线播放| 少妇伦子伦精品无吗| 亚洲一区一卡| 视频一区免费观看| 国产精品日韩精品在线播放| 色综合视频网站| 五月婷中文字幕| 欧美在线视频全部完| 色撸撸在线视频| 国产成人综合网| 欧美性大战久久久久xxx| 久久电影院7| 国产精品一码二码三码在线| 老司机成人影院| 日韩中文在线观看| 狠狠躁日日躁夜夜躁av| 福利视频第一区| 乱老熟女一区二区三区| 丁香婷婷综合激情五月色| 久久亚洲中文字幕无码| 欧美一区电影| 高清国语自产拍免费一区二区三区| 国内激情视频在线观看| 在线电影欧美日韩一区二区私密| 国产人妖一区二区三区| 国产欧美日韩一区二区三区在线观看| 亚洲欧美国产中文| 亚洲美女毛片| 在线观看一区二区三区三州 | 亚洲精品电影久久久| 婷婷综合六月| 国产精品一区二区在线观看网站| 精品一区二区三区毛片| 大桥未久女教师av一区二区| 国产成人精品国内自产拍免费看| 久草资源在线| 日韩成人在线电影网| 91丨九色丨蝌蚪丨对白| 无吗不卡中文字幕| 午夜精品一区二区三级视频| 久久综合视频网| 日韩欧美中文在线视频| 日韩成人伦理电影在线观看| 久久这里只有精品8| 禁果av一区二区三区| 97在线视频国产| 国产精品久久久久久久app| 91肉色超薄丝袜脚交一区二区| 五月婷婷综合网| 麻豆av一区二区三区| 成人在线免费电影网站| 8090成年在线看片午夜| mm1313亚洲国产精品美女| 日韩毛片高清在线播放| xxxxxx黄色| 国产乱子伦视频一区二区三区| 欧洲av无码放荡人妇网站| 亚洲电影影音先锋| 欧洲亚洲一区二区| 欧美激情网址| 成人在线视频电影| 99热这里有精品| 秋霞午夜一区二区| 超碰最新在线| 亚洲午夜精品久久久久久久久久久久 | 国产熟女一区二区三区五月婷| 欧美性xxxxx极品娇小| 国产精品第56页| 一区二区在线观看av| 亚洲综合视频网站| 久久久欧美精品sm网站| 少妇饥渴放荡91麻豆| 国产传媒一区在线| 91小视频在线播放| 久久精品国产亚洲高清剧情介绍 | 日本手机在线视频| 日韩在线理论| 一区二区三区三区在线| 色8久久久久| 国产精品麻豆va在线播放| 末成年女av片一区二区下载| 97香蕉久久超级碰碰高清版| 丰满的护士2在线观看高清| 欧美精品videosex性欧美| 免费在线观看的电影网站| 欧美黑人又粗大| 国产v日韩v欧美v| 日本高清不卡在线| 日韩免费va| 国产美女精彩久久| 羞羞视频在线观看一区二区| 亚洲xxxx视频| 国产66精品| 久久久久久精| 精品72久久久久中文字幕| 亚洲二区自拍| 中文字幕日韩一区二区不卡| 蜜臀精品一区二区| 亚洲国产专区校园欧美| 国产午夜伦鲁鲁| 奇米四色…亚洲| 国产又粗又猛又爽又黄| 成人动漫在线一区| 久久久久亚洲av成人无码电影| 欧美激情中文字幕| 69夜色精品国产69乱| 亚洲精品国产无天堂网2021| 国产乡下妇女做爰毛片| 亚洲国产日韩av| 亚洲少妇xxx| 亚洲毛片av在线| 日本五十熟hd丰满| 色诱视频网站一区| 国产又黄又爽视频| 亚洲二区中文字幕| 国产午夜在线观看| 欧美成人免费小视频| heyzo在线| 国产精品久久久999| 中文字幕一区二区三区日韩精品| 欧美高清一区二区| www.久久东京| 午夜欧美性电影| 国产白浆在线免费观看| 欧洲成人在线观看| 色8久久久久| 精品中文字幕人| 久久在线电影| 久久视频这里有精品| 老汉av免费一区二区三区| 91视频在线免费| 国产高清成人在线| 亚洲精品中文字幕在线播放| 国产精品久久久久一区二区三区共 | 一级特黄aa大片| 日韩的一区二区| 超碰人人在线| 国产精品三级美女白浆呻吟 | 亚洲精品中文字幕在线| 亚洲全部视频| 中文字幕剧情在线观看| 久久精品视频网| 日本中文字幕网| 91精品国产品国语在线不卡| 黄色av网站在线免费观看| 欧美黑人性视频| 国产精选久久| 亚洲欧美日产图| 久久在线91| 丝袜熟女一区二区三区| 亚洲你懂的在线视频| 久草热在线观看| 精品一区二区电影| 欧美韩日亚洲| 亚洲a∨日韩av高清在线观看| 精品免费一区二区| 日本一区二区黄色| 99热国产精品| 日本学生初尝黑人巨免费视频| 欧美丰满少妇xxxxx高潮对白| yiren22亚洲综合伊人22| 欧美亚洲伦理www| 日韩av三区| 鲁一鲁一鲁一鲁一色| 懂色av一区二区在线播放| 午夜成人亚洲理伦片在线观看| 欧美视频第二页| eeuss影院www在线播放| 国产精品免费一区二区三区都可以| 亚洲免费毛片| 大香煮伊手机一区| 国产亚洲欧美日韩在线一区| 免费的毛片视频| 欧美日韩免费一区二区三区视频| 人成在线免费视频| 91精品国产高清久久久久久久久 | 在线精品国产成人综合| 欧美aaa视频| 日韩欧美在线一区二区| 日韩精品一二区| 天堂资源在线视频| 欧美日韩高清在线播放| 欧美激情视频在线播放| 成人国产在线视频| 91tv精品福利国产在线观看| 亚洲高清视频免费| 亚洲免费av高清| 国产小视频免费观看| 97在线视频精品| 女人丝袜激情亚洲| 国产xxxxx视频| 亚洲欧洲精品一区二区三区不卡| 国产又粗又黄视频| 欧美成人在线网站| 91在线一区| 国产又大又硬又粗| 国产精品无码永久免费888| 91精品国产综合久| 欧美多人爱爱视频网站| 欧亚精品一区| 午夜免费看视频| 亚洲一区二区在线免费观看视频 | 色偷偷av亚洲男人的天堂| 99精品女人在线观看免费视频| www.日本三级| 91免费国产在线| 亚洲综合网av| 欧美激情精品在线| 色综合中文网| 国产一级片中文字幕| 精品久久久久久中文字幕大豆网 | 日本www.色| 亚洲欧美激情插 | 亚洲 高清 成人 动漫| 国产欧美视频在线观看| www.五月婷婷| 日韩免费中文字幕| 中文字幕午夜精品一区二区三区| 免费中文字幕av| 51精品视频一区二区三区| www在线观看黄色| 中文字幕精品一区日韩| 成人18视频日本| 在线视频你懂得| 久久久久女教师免费一区| 国产不卡一二三区| 亚洲欧美日韩中文字幕在线观看| 欧美视频在线观看免费| 国产精品va在线观看视色| 久久一区二区精品| 国内一区二区在线| 青青草自拍偷拍| 亚洲国产精品国自产拍av秋霞| 人人精品久久| 日本久久久精品视频|