トレースされたプロセスでコードを挿入しようとしています...レジスター(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);
1つ目print_word
は、GDBによって表示される4バイトを正確に出力します。2番目print_word
は、代わりに、ではなく奇妙なバイトを出力します0xAABBCCDD
。
何か案は?