我在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_lock
then pthread_set_self
。但是,当它遇到第一个时pthread_mutex_lock
,我遇到了同样的问题。它死在同一个地方。
有任何想法吗?
我没有源代码的目标应用程序是多线程的。