1

以下は、小さなサンプル トレース プログラムのコードです。

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
4

0 に答える 0