2

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.
    ??
}
4

1 回答 1

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;

通过这种方式,您可以提取ebpeip。希望这会有所帮助!

于 2013-07-05T05:56:52.147 回答