【发布时间】:2011-05-11 15:35:53
【问题描述】:
有没有办法找到在您的进程中运行的另一个线程的线程信息块 (TIB)?
我需要为另一个线程构建一个异常处理程序,但我不能在线程本身中执行它。因此我需要找到它的 TIB 并从另一个线程中构建它。我怎样才能做到这一点?
【问题讨论】:
-
我不认为你可以改变任何线程的 TIB ......可能甚至在内核模式下也不能。
-
当然可以,它只是一个内存数据结构。这样做是个糟糕的主意,但它不是魔法——它处于用户模式。
-
@Paul Betts,你也知道怎么做吗?
-
@Paul,如果您真的愿意,您可以随时更改您想要的任何内容,但这并不是说这是一个好主意。我只是从 POV 说的,一般来说,摆弄它不是一个好主意。
-
我同意 floyd73 的回答:您可以使用
GetThreadContext获取FS选择器并获取TIB。但是我不完全理解“构造异常处理程序”的意思。你的意思是你想用你的处理程序显式地添加一个 SEH 异常注册 record 到链中吗?请注意,AFAIK SEH 注册记录必须按内存降序排列(这是针对内存损坏的操作系统保护)。通常没有问题,因为此类记录是在堆栈上分配的,但您的方法可能存在问题
标签: windows multithreading seh