好友
阅读权限10
听众
最后登录1970-1-1
|
目前尝试制作自己的调试器,在尝试修改内存的时候:
ptrace(PTRACE_POKEDATA, pid, address, &long_tmp);
第四个参数无效 无论第四个参数是什么 对应的内存地址都会被置为 00 00 00 00
有遇到过这个问题的吗?求交流
有研究Android调试器的吗?求交流
Q:1990343340
运行环境:AndroidX86模拟器
编译环境:window+ndk
下边是关键代码以及运行日志
//关键代码
void addBreakPoints(long long address){
long result;
cout<<"address = "<<address<<endl;
//long ins = ptrace(PTRACE_PEEKDATA, pid, address, nullptr);
long long_tmp = 0x1fff;
cout<<"PTRACE_POKEDATA之前展示内存"<<endl;
showMemoryabc(address,0x20);
result = ptrace(PTRACE_POKEDATA, pid, address, &long_tmp);
cout<<"返回值: "<<result<<endl;
cout<<"PTRACE_POKEDATA之后展示内存"<<endl;
showMemoryabc(address,0x20);
}
//运行日志
address = 2315314352
PTRACE_POKEDATA之前展示内存
55 89 E5 56 83 E4
FC 83 EC 14 8B 45
10 8B 4D 0C 8B 55
08 8B 75 10 83 C6
01 89 44 24 10 89
F0 89
返回值: 0
PTRACE_POKEDATA之后展示内存
00 00 00 00 83 E4
FC 83 EC 14 8B 45
10 8B 4D 0C 8B 55
08 8B 75 10 83 C6
01 89 44 24 10 89
F0 89
由运行日志可以看出,address没问题,不然的话对应的内存地址的值不会被改变
可是我传的值是 0x1fff(ff 1f 00 00) 为什么对应位置的内存变成了 00 00 00 00 |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|