gpt4 book ai didi

linux - 如何在 Linux/Unix 中实现 GetThreadContext?

转载 作者:可可西里 更新时间:2023-11-01 10:26:09 27 4
gpt4 key购买 nike

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

最佳答案

获取线程信息的 Linux 特定方法是使用 get_thread_area()。来自 get_thread_area() 手册页:

get_thread_area() returns an entry in the current thread's Thread Local Storage (TLS) array. The index of the entry corresponds to the value of u_info->entry_number, passed in by the user. If the value is in bounds, get_thread_area() copies the corresponding TLS entry into the area pointed to by u_info.

但是,如果你想读取寄存器值,你需要借助内联汇编。 Fox 示例,要检索 esp 的值,您可以使用以下内联汇编:

unsigned sp;
__asm __volatile("movl %%esp, %0" : "=r" (sp));
return sp;

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

关于linux - 如何在 Linux/Unix 中实现 GetThreadContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17480853/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com