如何使用ptrace()获得arm CPU的寄存器信息
在/usr/include/asm/ptrace.h 中看到以下代码
然后我希望使用x86上的方式获得CPU寄存器值:
但是实际执行的时候,输出
EIP: 0 Instructions executed: ffffffff
小弟实在是菜,不知道如何是好了……希望各位指教
struct pt_regs {
long uregs[18];
};
#define ARM_cpsr uregs[16]
#define ARM_pc uregs[15]
#define ARM_lr uregs[14]
#define ARM_sp uregs[13]
#define ARM_ip uregs[12]
#define ARM_fp uregs[11]
#define ARM_r10 uregs[10]
#define ARM_r9 uregs[9]
#define ARM_r8 uregs[8]
#define ARM_r7 uregs[7]
#define ARM_r6 uregs[6]
#define ARM_r5 uregs[5]
#define ARM_r4 uregs[4]
#define ARM_r3 uregs[3]
#define ARM_r2 uregs[2]
#define ARM_r1 uregs[1]
#define ARM_r0 uregs[0]
然后我希望使用x86上的方式获得CPU寄存器值:
int main(int argc, char *argv[])
{
pid_t traced_process;
struct pt_regs regs;
long ins;
if ( argc != 2 ) {
printf("Usage: %s <pid to be traced>", argv[0]);
exit(1);
}
traced_process = atoi(argv[1]);
ptrace(PTRACE_ATTACH, traced_process, NULL, NULL);
wait(NULL);
ptrace(PTRACE_GETREGS, traced_process, NULL, ®s);
ins = ptrace(PTRACE_PEEKTEXT, traced_process,
regs.ARM_ip, NULL);
printf("EIP: %lx Instructions executed: %lx\n", regs.ARM_ip, ins);
ptrace(PTRACE_DETACH, traced_process, NULL, NULL);
return 0;
}
但是实际执行的时候,输出
EIP: 0 Instructions executed: ffffffff
小弟实在是菜,不知道如何是好了……希望各位指教
...全文
相关推荐
Android全平台动态链接库注入与进程控制工具_基于ptrace系统调用实现跨架构内存读写与代码注入_支持ARM32_ARM64_x86_x86_64多种CPU架构_集成反调试检.zip
通过ptrace,一个进程可以观察和控制另一个进程的执行,读写其寄存器和内存,这使得ptrace成为实现内存读写和代码注入的理想选择。工具利用ptrace跨架构实现上述功能,显示了其高级的技术能力。
支持任意数量watchpoint的建议.pptx
在 Linux 下,watchpoint 的实现是通过 ptrace 写地址和相关信息到调试寄存器控制硬件watchpoint。
支持任意数量watchpoint的建议.pdf
GDB(GNU Debugger)利用ptrace系统调用将watchpoint设置在调试寄存器中,当程序尝试修改被监视的地址时,CPU会触发异常。
基于QBDI框架的Android平台ARM64架构SO层动态二进制插桩Trace工具_ATrace引擎_多线程异步IO_MMap高效文件写入_Frida注入libatraceso.zip
工具配套附赠资源.docx文档完整涵盖QBDI ARM64插桩原理图解、ATrace事件结构体定义(含opcode、pc、sp、lr、x0-x30寄存器快照、内存访问标记、线程ID、时间戳字段)、mmap
LSPosed-v2.1.1-7790-release.zip
ELF 解析器、内存页保护绕过逻辑、寄存器上下文保存与恢复机制,并内置 ARM 指令集适配层与 AArch64 寄存器映射表。


