以下は、小さなサンプル トレース プログラムのコードです。
int main (int argc, const char * argv[])
{
cout<<getpid()<<endl;
int* array = new int[100];
memset(array, 0, 100*sizeof(int));
for(int i=0;i<10;++i){
array[i]=i;
printf("array address[%d]:%x\n",i,array+i);
}
int index;
while(cin>>index){
if(index<0||index>100)continue;
array[index] = array[index]*10;
}
return 0;
}
プログラムを dummy.c として保存します。コンパイルして実行します: ./dummy
出力では、配列 [1] のアドレスを取得します: 0x100046 で、その値は 1 です。
次に、以下のコードを使用してダミーにアタッチします。
unsigned long addr = 0x100046
if(ptrace(PT_ATTACH, child,NULL, NULL)==-1)
printf("Attach Failed!");
wait(NULL);
long data = ptrace(PT_READ_D, child, (void*)addr, 0); // after reading data always is -1, it should be 1 according dummy application