我想知道除了使用「GetThreadContext」之外,是否還有一種方法可以獲得不同進程(Windows上的C++)中線程的EBP。我懷疑這種方法花費了太多時間(我使用了很多),如果我能夠得到EBP而不是所有CONTEXT的值,它會更快。
我正在考慮使用「ReadProcessMemory」,然後將EBP與其餘的調用堆棧進行比較,但是我不知道堆棧應該在哪裏以及從哪裏得到它。
如果有人知道更好的方法,我很樂意聽到它。
謝謝:)在另一個進程中獲取線程的EBP
1
A
回答
3
如果線程正在運行,另一個線程的EBP的運行值當然是在EBP寄存器中。如果它沒有運行,它會被內核中的調度程序保存。 GetThreadContext正在檢索內核中的內容;沒有別的會更快。
表現情況比我在寫這篇文章時所理解的要糟糕。如果線程正在運行,內核將使用APC機制爲您獲取最新的值。這不是很快,但沒有其他替代API。
1
GetThreadContext將是唯一的方法,因爲EBP是一個寄存器;處理器在執行上下文切換時將其保存起來。讀取線程寄存器的唯一方法是使用GetThreadContext。
當然,不能保證EBP具有您想要的值...使用幀指針省略編譯的函數不會可靠地將EBP設置爲當前調用幀的幀指針。
如果您只是在尋找堆棧跟蹤(最常見的原因希望EBP開始),我可能會建議StackWalk64?
相關問題
- 1. 如何獲取一個進程在Bash中的另一個進程的PID?
- 2. 在另一個Windows進程中獲取當前線程的語言環境
- 3. 殺死另一個進程的線程
- 4. 從另一個進程獲取信息
- 5. 獲取另一個進程'QueryPerformanceCounter()
- 6. 從C++中的另一個進程解鎖一個線程
- 7. 我如何從另一個線程或進程中獲取數據(Android/Java)
- 8. 在C++中獲取另一個進程的會話ID
- 9. 如何從另一個進程/內核線程中搶佔一個進程?
- 10. 獲取另一個進程的程序/函數地址
- 11. 獲取另一個線程上的RichTextBox中的文本
- 12. 在另一個進程中從SysHeader32控件獲取列名
- 13. 一個線程如何在另一個線程中被殺死
- 14. linux:以編程方式獲取另一個進程的父進程?
- 15. 獲取Linux內核中另一個進程的進程CPU時間時鐘
- 16. 在一個線程中調用Add on SortedDictionary並在另一個線程中獲取Item是否安全?
- 17. 確定另一個進程中的UI線程
- 18. 獲取進程主線程的句柄
- 19. PlaySound在另一個線程
- 20. 在另一個線程
- 21. 獲取Windows中另一個進程的命令行參數
- 22. 多線程:啓動一個線程,而另一個進程不斷去
- 23. 在while循環中的另一個線程內的線程
- 24. Python:在一個線程中停止另一個線程從另一個線程結束
- 25. 一個線程在iPhone應用程序中殺死另一個線程(兩個線程都是主線程)?
- 26. 如何從Java中的另一個線程的一個線程中獲取數據?
- 27. 如何在Android進程中獲取正在運行的線程?
- 28. 從另一個線程寫入陣列中獲取數據
- 29. 卡在從另一個線程獲取數組
- 30. 在另一個線程上執行獲取請求
你在寫什麼,一個分析器?也許如果你解釋你的問題,有人可以給你一個更快的方式。 – 2010-12-04 23:55:50
是的,一個分析器:) – Idov 2010-12-05 06:53:00