我想知道除了使用“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