当我在应用程序中启动远程线程时,为什么它在尝试访问线程结构中的数据时总是崩溃?

逆向工程 操作系统 线 数据库 注射
2021-07-03 15:10:13

我在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

(注:gs0x00000000在指令之前崩溃的发生位置)

我的理解是这条指令是gs从线程段结构中检索第一段并将其移入rax寄存器的操作。

我的问题是我需要做些什么来防止在执行此指令时发生崩溃? 执行此指令后,我EXC_BAD_ACCESSpthread_mutex_lock.

我尝试将代码放入 to pthread_mutex_init,然后放入pthread_mutex_lockthen pthread_set_self但是,当它遇到第一个时pthread_mutex_lock,我遇到了同样的问题。它死在同一个地方。

有任何想法吗?

我没有源代码的目标应用程序是多线程的。

0个回答
没有发现任何回复~