GetThreadContext是一个Windows API。
BOOL WINAPI GetThreadContext(
_In_ HANDLE hThread,
_Inout_ LPCONTEXT lpContext
);
我想知道如何在linux中实现它。 如何在Linux中检索指定线程的寄存器信息?
像这样:
pthread_create(thread_id, ...);
...
func(thread_id, reg_info)
{
//get the reg_info by thread_id.
??
}
答案 0 :(得分:2)
获取线程信息的特定于Linux的方法是使用get_thread_area()
。从get_thread_area()
手册页:
get_thread_area()
返回当前线程的线程本地存储(TLS)数组中的条目。条目的索引对应于用户传入的u_info->entry_number
的值。如果值在边界内,get_thread_area()
将相应的TLS条目复制到u_info
指向的区域。
但是,如果要读取寄存器值,则需要获取内联汇编的帮助。 Fox示例,要检索esp的值,可以使用以下内联汇编:
unsigned sp;
__asm __volatile("movl %%esp, %0" : "=r" (sp));
return sp;
通过这种方式,您可以提取ebp
,eip
等。希望这会有所帮助!