我有一個進程正在調用sleep(),我想覆蓋sleep()的返回地址,所以當它返回時它會執行我的代碼。進行覆蓋的過程在沒有保護或隔離的情況下運行。那存儲的返回地址在哪裏?我怎樣才能用asm來改變它呢?我將如何覆蓋內核函數的返回地址?
0
A
回答
0
您不能在x86架構中從用戶模式覆蓋內核函數的返回地址 - 處理器在執行使用它的特權間控制傳輸時切換堆棧。
而且根據mechanism used to enter the kernel-mode,地址甚至可能不在堆棧中。
像往常一樣,所有的細節在Intel Software Developer's Manual 3。
也就是說,大多數的用戶模式功能是該系統圍繞包裝要求 - 讓他們都沒有,還沒有,內核函數,因此你可以「簡單」毒堆棧上的返回地址轉向控制流程如您所願(àla Return Oriented Programming)。
承認您的掛鉤代碼有機會在掛鉤函數返回之前執行。
但是過程是分離的,我不知道你是什麼意思與
做覆寫下一沒有保護或單獨運行的過程。
但是無論如何,您都需要在掛鉤過程中擁有有效載荷。
根據您如何在第一時間放置有效負載,將目標函數的調用更改爲調用原始函數以及執行有效負載的過程的調用可能更容易(取而代之處理類似堆棧的瞬態結構)。
該行的底部,如果您打算修補可執行文件以在其代碼部分中放置有效內容,請修改該調用。
如果你的未說明的意圖是劫持一個導入/動態鏈接的函數,那麼它本身就會調用一個特定的問題,並提供比你在這裏提供的更好的上下文。
相關問題
- 1. 我害怕覆蓋函數或被我的函數覆蓋
- 2. 如何覆蓋內部函數
- 3. 統一內核函數返回NaN的
- 4. 如何查看內核函數和系統調用的地址?
- 5. 緩衝區溢出 - 無法覆蓋返回地址
- 6. 將本地指針變量的地址返回給main()函數
- 7. 如何覆蓋wildfly下耳朵內的wsdl肥皂地址?
- 8. 函數返回後本地內存地址是否有效?
- 9. Ninject內核綁定覆蓋
- 10. LAMBDA返回內存地址
- 11. 如何覆蓋UITextViewDelegate函數
- 12. 如何覆蓋django.utils.text.slugify函數
- 13. 地址運算符 「&」 與函數返回
- 14. 我想回覆我的回覆網址
- 15. 如何用IMessageSink.SyncProcessMessage覆蓋返回值
- 16. 如何覆蓋方法返回類型?
- 17. 當在另一個包中調用核心函數時如何最好地覆蓋/包裝核心函數
- 18. 如何從核心位置返回的位置檢索地址
- 19. 緩衝區溢出漏洞,覆蓋功能參數,包括返回地址
- 20. 如何從CUDA內核函數返回一個變量?
- 21. 哪個函數告訴我內核綁定本地套接字的地址?
- 22. 如何用github上的一個覆蓋我的本地回購?
- 23. 運行時加載內核模塊如何知道核心內核函數的地址?
- 24. 如何將我的函數返回值傳遞給父函數
- 25. 從一個函數內的jQuery覆蓋
- 26. 用不同的返回類型將函數的地址賦給函數指針
- 27. 從函數返回時Python覆蓋數組
- 28. 覆蓋函數模板專門化中的返回類型
- 29. std :: string :: c_str()覆蓋函數返回的前一個
- 30. 函數覆蓋不同的返回類型
'存儲的返回地址在哪裏 - 像往常一樣在棧上。問題不是如何覆蓋它,而是如何找到它的位置以及如何到達那裏(操作系統不會讓你訪問你的內存)。 – Anty
如果您使用優化編譯並且您的「睡眠」函數被內聯了,會發生什麼? –