ПИН-код входного аргумента - PullRequest
0 голосов
/ 04 июля 2018

Мне интересно, есть ли у кого-нибудь из вас опыт чтения / записи входных аргументов инструментального метода?

Технически это так просто и просто, когда метод имеет некоторый примитивный тип данных в качестве входных параметров. Например, integer или double. Однако, когда это более сложный тип данных, такой как string, я столкнулся со странным поведением в структуре фреймворка. В двух словах, я не могу восстановить исходный ввод данных.

Ниже вы видите мою измерительную функцию. Он просто пытается напечатать входные аргументы, переданные инструментальному методу.

VOID start_of_execution(uint64_t hash_name, int type, 
   ADDRINT input_arg1, 
   ADDRINT input_arg2
){

cout << "int arg:" << input_arg1 << endl; // prints the integer input
cout << "string*:" << hex << input_arg2 << endl; // prints the pointer value
cout << "string arg:" << *(reinterpret_cast<string*>(input_arg2)) << endl; // prints nothing!
}

Вот инструментальный метод, единственная функциональность которого заключается в печати входных аргументов.

int sample_method(int i, string* str){
   cout << "-----" << endl;
   cout << "i: " << i << ", str:" << *str <<", ptr:" << str << endl;
   return 0;
}

Ниже вывод:

$ sudo ../../../pin -t obj-intel64/code/mypin.so -- ./code/a.out
int arg:5
string*:0x1704434923
string arg:
-----
i: 5, str:sample text, ptr:0x1704434923

Как видите, целочисленный аргумент (номер 5) был получен правильно. Однако, даже если указатель строки действителен, PIN не смог восстановить входной аргумент строки.

Кто-нибудь имеет представление о моей проблеме?

...