我正在尝试在跟踪的进程中注入代码...我能够正确读取寄存器(PTRACE_GETREGS
)并且也可以PTRACE_PEEKTEXT
工作...我已经使用 GDB 进行了验证。但是,如果我ptrace
用PTRACE_POKETEXT
请求调用它会返回0
但在同一地址再次读取我找不到预期的字节:
void print_word(long res) {
char *datap = (char *)&res;
if (res == -1)
//check errno for errors
else
printf("%02X %02X %02X %02X\n", datap[0], datap[1], datap[2], datap[3]);
}
....
long res, data = 0xAABBCCDD;
res = ptrace(PTRACE_PEEKTEXT, pid, (void *)regs.eip, NULL);
print_word(res);
res = ptrace(PTRACE_POKETEXT, pid, (void *)regs.eip, (void *)&data);
if (res != 0)
//error
res = ptrace(PTRACE_PEEKTEXT, pid, (void *)regs.eip, NULL);
print_word(res);
第一个print_word
精确打印 GDB 显示的四个字节。第二个print_word
代替打印奇怪的字节而不是0xAABBCCDD
.
有任何想法吗?