我在OS X 10.10 64 位 (x86_64) 上并使用vm_allocate. 我为堆栈分配了一块内存。我将一个库加载到内存中并确定该库的入口点。我使用 将库写入我的代码缓冲区vm_write,没有问题。
我设置了寄存器并调用thread_create_running远程线程并将其运行到另一个进程中。
在另一个进程中,线程开始。我正在使用lldb并对其进行了设置,因此当我的线程启动时,它会在该入口点中断, 我会看到我的代码。我逐步完成代码。
但是,当它尝试执行_pthread_set_self. 如果我进入pthread_set_self,它会_pthread_mutex_lock按照以下说明崩溃
:
movq %gs:0x0, %rax
(注:gs是0x00000000在指令之前崩溃的发生位置)
我的理解是这条指令是gs从线程段结构中检索第一段并将其移入rax寄存器的操作。
我的问题是我需要做些什么来防止在执行此指令时发生崩溃? 执行此指令后,我EXC_BAD_ACCESS在pthread_mutex_lock.
我尝试将代码放入 to pthread_mutex_init,然后放入pthread_mutex_lockthen pthread_set_self。但是,当它遇到第一个时pthread_mutex_lock,我遇到了同样的问题。它死在同一个地方。
有任何想法吗?
我没有源代码的目标应用程序是多线程的。