jjzjj

windows - 一个进程如何访问外部 TIB?

是否有可能(以及如何)访问某个其他进程的线程的线程信息block? 最佳答案 这是可能的。第一步是使用NtQueryInformationThread获取线程信息block的地址。ThreadInformationClass设置为ThreadBasicInformation的函数.THREAD_BASIC_INFORMATION结构包含指向线程的TEB的指针。然后你可以使用ReadProcessMemory和WriteProcessMemory以便阅读或修改TEB的内容。 关于windo

c++ - 通过 FS 寄存器访问衍生进程的 TIB?

我想访问衍生进程的TIB(我使用CreateProcessW成功创建了进程)。我通过以下方式获得了指向生成进程的TIB的指针:GetThreadContext(当然有权限设置)访问pContext.SegFs像这样格式化这个值:(ldtSel.HighWord.Bits.BaseHi(我不认为这是必要的)。格式后我剩下的值是一个10位指针。我如何使用这个变量代替fs寄存器来访问线程信息block?我访问它的常规方式通常是这样的:__asm{moveax,fs:[0x30]//PEBmovdwPebBase,eax}不过,用指针变量替换“fs”当然不行,去掉分号还有意想不到的效果。那么我

c - 在 Win32 TIB 中保存数据

Thread-InformationBlock应该广为人知,可以用来访问一些重要的信息。但是我可以用它来保存数据吗?我已经看到该结构在偏移14h(x86)/28h(x86-64)处有一个用于任意指针的槽。我可以使用这个指针从我自己的调度程序指向我自己的线程结构吗?或者它会被其他东西覆盖吗? 最佳答案 您可以使用TlsAlloc()分配线程本地存储的函数。每个TLS索引都可以保存一个指针大小的值,因此如果需要,您可以使用TLS插槽指向更大的已分配数据结构。参见UsingThreadLocalStorage举个例子。

c++ - 在 Windows、TIB 和异常上修改堆栈

我的问题的起源实际上源于想要在支持用户提供堆栈的Windows上提供pthreads的实现。具体来说,pthread_attr_setstack应该做一些有意义的事情。我的实际要求比这要复杂一些,但这足以满足本文的目的。没有公共(public)WinAPI可以在Fiber或ThreadAPI中提供堆栈。我四处寻找偷偷摸摸的后门、变通办法和黑客,没有任何进展。事实上,我查看了winpthread源代码以获得灵感,它忽略了提供给pthread_attr_setstack的任何堆栈。相反,我尝试了以下“解决方案”以查看它是否可行。我使用ConvertThreadToFiber、CreateF

windows - 查找另一个线程的线程信息 block

有没有办法找到您的进程中运行的另一个线程的线程信息block(TIB)?我需要为另一个线程构造一个异常处理程序,但我不能在线程本身中完成它。因此我需要找到它的TIB并从另一个线程中构建它。我怎样才能做到这一点? 最佳答案 您可以直接从FS寄存器访问TIB的地址(检查http://www.microsoft.com/msj/archive/S2CE.aspx)。因此,要为另一个线程获取TIB,也许可以使用GetThreadContext()来获取FS的值,从而获取TIB的地址?(只是猜测,我没试过!)

c - Win32 中的 TIB 访问

深入研究与TIB(线程信息block)一起工作的Win32API函数的实现,例如:TLS访问函数:TlsAlloc、TlsFree、TlsSetValue、TlsGetValueGetLastError,SetLastError消息子系统:GetMessage、PeekMessage等通过读取fs:[0x18]选择器的内容,我们发现它们都访问了TIB,有时称为TEB(线程环境block)。OTOH这是不必要的,因为fs寄存器直接指向它。根据thisarticle我在实践中看到的是,fs寄存器保存了TIB结构开头的地址,而在偏移量0x18处它有一个指向自身的指针。间接访问TIB的原因可能

windows - TIB 自定义存储

经过相当多的谷歌搜索和一些提示后here,我终于设法findalayoutFS段(Windows用来存储TIB数据)。我特别感兴趣的是PSDK中提供的ArbitraryUserPointer成员:typedefstruct_NT_TIB{struct_EXCEPTION_REGISTRATION_RECORD*ExceptionList;PVOIDStackBase;PVOIDStackLimit;PVOIDSubSystemTib;union{PVOIDFiberData;DWORDVersion;};PVOIDArbitraryUserPointer;struct_NT_TIB*S

windows - 获取线程信息/环境 block (TIB/TEB)的官方方式

在Windows中,很早就知道当前线程的线程信息block(TIB)可以在FS:0处找到(如果未记录的话)。但这只适用于IntelCPU,其中FS寄存器首先存在。现在我想在基于ARM的Windows系统(WindowsPhone和可能是WindowsRT)上使用TIB。请问是否有相应的API?编辑:我想获取用于崩溃报告目的的线程堆栈库。有关TIB/TEB的信息:http://www.microsoft.com/msj/archive/S2CE.aspx 最佳答案 宏NtCurrentTeb()在winnt.h中可用,适用于所有支持的