我想知道除了使用“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. 从C++中的另一个进程解锁一个线程
- 5. 我如何从另一个线程或进程中获取数据(Android/Java)
- 6. 一个线程如何在另一个线程中被杀死
- 7. linux:以编程方式获取另一个进程的父进程?
- 8. 在另一个线程
- 9. 获取进程主线程的句柄
- 10. 获取Windows中另一个进程的命令行参数
- 11. 多线程:启动一个线程,而另一个进程不断去
- 12. Python:在一个线程中停止另一个线程从另一个线程结束
- 13. 一个线程在iPhone应用程序中杀死另一个线程(两个线程都是主线程)?
- 14. 如何从Java中的另一个线程的一个线程中获取数据?
- 15. 在另一个线程上执行获取请求
- 16. 如何在Android进程中获取正在运行的线程?
- 17. c#异常抛出一个线程被捕获在另一个线程
- 18. 从另一个线程捕获异常
- 19. 从另一个线程运行线程
- 20. 从另一个线程操作线程
- 21. 连接到另一个线程上的TcpListener,相同的进程
- 22. 设置线程本地值获得另一个线程
- 23. 在另一个线程中运行MBProgressHUD?
- 24. 在另一个线程中显示ProgressBar
- 25. iPhone:创建另一个线程并执行一些进程
- 26. 获取pub的进程ID,然后杀死该线程/进程
- 27. 一个线程请求取消另一个线程的可能性
- 28. 在另一个线程中进行计算
- 29. 在另一个线程中更新进度条
- 30. 在另一个线程中运行进度条
你在写什么,一个分析器?也许如果你解释你的问题,有人可以给你一个更快的方式。 – 2010-12-04 23:55:50
是的,一个分析器:) – Idov 2010-12-05 06:53:00