【发布时间】:2014-04-14 10:40:44
【问题描述】:
好的,这是一个简单的问题。当我使用 ptrace 系统调用时,android 是否支持 PTRACE_SINGLESTEP?当我想 ptrace 一个 android apk 程序时,我发现我无法处理 SINGLESTEP 跟踪。但是当我使用 PTRACE_SYSCALL 时情况发生了变化,它可以完美地工作。 android是不是淘汰了这个功能或者arm在硬件上缺少一些支持?任何帮助将不胜感激!谢谢。
这是我的核心程序:
int main(int argc, char *argv[])
{
if(argc != 2) {
__android_log_print(ANDROID_LOG_DEBUG,TAG,"please input the pid!");
return -1;
}
if(0 != ptrace(PTRACE_ATTACH, target_pid, NULL, NULL))
{
__android_log_print(ANDROID_LOG_DEBUG,TAG,"ptrace attach error");
return -1;
}
__android_log_print(ANDROID_LOG_DEBUG,TAG,"start monitor process :%d",target_pid);
while(1)
{
wait(&status);
if(WIFEXITED(status))
{
break;
}
if (ptrace(PTRACE_SINGLESTEP, target_pid, 0, 0) != 0)
__android_log_print(ANDROID_LOG_DEBUG,TAG,"PTRACE_SINGLESTEP attach error");
}
ptrace(PTRACE_DETACH, target_pid, NULL, NULL);
__android_log_print(ANDROID_LOG_DEBUG,TAG,"monitor finished");
return 0;
}
我在 shell 上运行这个程序。而且我可以获得root权限。 如果我将请求更改为 PTRACE_SYSCALL 程序将正常运行。 但是如果请求是PTRACE_SINGLESTEP,程序就会报错!
【问题讨论】: