为什么PTRACE_GETREGS无法在Windows的MoMo(Android模拟器)播放器中的arm so文件上工作?

时间:2018-07-28 13:31:27

标签: c linux arm shared-libraries ptrace

我想将arm so文件附加到正在运行的apk中。 这是我的代码。

#include <pthread.h>

#define GAME_PACKAGE_NAME "com.example.user.myapplication"

pid_t  pid;
struct pt_regs regs;
int main(int argc, char** argv) {

    pid = find_pid_of(GAME_PACKAGE_NAME);
    if (ptrace(PTRACE_GETREGS, pid, NULL, &regs) < 0) {
        DEBUG_PRINT("ptrace_getregs: Can not get register values");
        return -1;
    }
    if (ptrace(PTRACE_SETREGS, pid, NULL, &regs) < 0) {
        DEBUG_PRINT("ptrace_setregs: Can not set register values");
        return -1;
    }
    if (ptrace(PTRACE_CONT, pid, NULL, 0) < 0) {
        DEBUG_PRINT("ptrace_cont");
        return -1;
    }
    if (ptrace(PTRACE_DETACH, pid, NULL, 0) < 0) {
        DEBUG_PRINT("ptrace_detach");
        return -1;
    }
}

当我将上述代码构建为“ x86”并将其安装在模拟器上时,效果很好。

当我将此代码构建为“ arm”时, ptrace(PTRACE_GETREGS, pid, NULL, &regs)行有效,但regs的内容为空。因此发生ptrace(PTRACE_SETREGS, pid, NULL, &regs)行错误。

我不明白为什么PTRACE_GETREGS无法正常工作。

0 个答案:

没有答案