亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 2179 | 回復(fù): 1
打印 上一主題 下一主題

[內(nèi)核模塊] mips 內(nèi)核函數(shù)inline hook 問(wèn)題 [復(fù)制鏈接]

論壇徽章:
1
處女座
日期:2013-08-19 12:39:10
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2013-08-18 19:19 |只看該作者 |倒序?yàn)g覽
本帖最后由 wsgtrsys 于 2013-08-18 19:26 編輯

因?yàn)樾枰獙?duì)內(nèi)核中的一個(gè)函數(shù)劫持后,修改其中的一個(gè)變量 。
是參考這個(gè)篇文章的的做法。
http://jan.stancek.eu/mips_function_runtime_detour

原來(lái)曾經(jīng)在2.6.16的內(nèi)核上劫持成功,但最近在2.6.35的內(nèi)核上就不行了。
2.6.35內(nèi)核的代碼部分仿佛是只讀的,不能修改原來(lái)的函數(shù)的機(jī)器碼。

有兩個(gè)問(wèn)題:
1、mips上是不是有類(lèi)似于x86上的cr0寄存器?
2、如果不是用cr0進(jìn)行保護(hù),是不是用tlb中的D bit 位置非零的方法使代碼段只讀?

于是google查到使代碼段可寫(xiě)的文章,找到這篇文章:
http://www.linuxquestions.org/qu ... iver-module-769705/
他的代碼是(不過(guò)他自己也說(shuō)這段代碼有問(wèn)題):
  1. int
  2. write_protect_pages(u32 addr, int npages)
  3. {
  4. pte_t pp, *ptep;
  5. pmd_t *pmd;
  6. pgd_t *pgd;
  7. int i;
  8. unsigned long flags;

  9. spin_lock_irqsave(&mktextro_lock, flags);

  10. for (i=0; i<npages; i++) {

  11. /* Get the 2nd level Page Table from Kernel Page Directory */
  12. pgd = pgd_offset_k(addr);

  13. /* Get to the 3rd level Page Table */
  14. pmd = pmd_offset(pgd, addr);

  15. /* Get the pointer to PTE */
  16. ptep = pte_offset_kernel(pmd, addr);

  17. /* Get the old protection for the page */
  18. pp = __pte(pte_val(*ptep));

  19. /* Disable writes to this page */
  20. pp = __pte(pte_val(*ptep) & ~(_PAGE_WRITE | _PAGE_SILENT_WRITE));

  21. set_pte(ptep, pp);

  22. local_flush_tlb_all();

  23. addr += PAGE_SIZE;
  24. }

  25. spin_unlock_irqrestore(&mktextro_lock, flags);

  26. return 0;
  27. }
復(fù)制代碼
我參照一些代碼,然后自己寫(xiě)了一段代碼:
  1. int set_page_rw(long unsigned int _addr)
  2. {
  3.    struct page *pg;
  4.    pte_t entry;
  5.    
  6.    pgprot_t prot;
  7.    pg = virt_to_page(_addr);
  8.    prot.pgprot = VM_READ | VM_WRITE | VM_EXEC  ;
  9.    
  10.    entry =  pte_mkwrite(pte_mkdirty(mk_pte(pg, prot)));

  11. }
復(fù)制代碼
不過(guò)執(zhí)行這段代碼后,使用
  1. if (!access_ok(VERIFY_WRITE, (void __user *) 0xc02c1b78, 20))
  2.         {
  3.                 printk("hook not read\n");
  4.                 return -EFAULT;
  5.         }
復(fù)制代碼
仍然是不可寫(xiě)。
不知道大家有什么好的意見(jiàn)?

論壇徽章:
1
處女座
日期:2013-08-19 12:39:10
2 [報(bào)告]
發(fā)表于 2013-08-19 11:00 |只看該作者
經(jīng)過(guò)測(cè)試,代碼段是可寫(xiě)的。
出現(xiàn)問(wèn)題應(yīng)該是hook和還原代碼后的cache沒(méi)有及時(shí)更新。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP