我想将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, ®s) < 0) {
DEBUG_PRINT("ptrace_getregs: Can not get register values");
return -1;
}
if (ptrace(PTRACE_SETREGS, pid, NULL, ®s) < 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, ®s)
行有效,但regs
的内容为空。因此发生ptrace(PTRACE_SETREGS, pid, NULL, ®s)
行错误。
我不明白为什么PTRACE_GETREGS无法正常工作。