Я использую PIN-код для инструментирования двоичного кода моего приложения и создания списка адресов (точнее, чтения памяти), созданных приложением. У меня есть процедура инструментирования, которая передает IARG_MEMORYREAD_SIZE, IARG_MEMORYREAD_EA в качестве аргументов. Однако я хочу вывести информацию о типе переменной приложения на основе читаемого объема памяти.
Например, если PIN-код наблюдает за чтением памяти из 4 байтов, как я могу сделать вывод, к какому типу данных осуществляется доступ. Это int/float? Точно так же для 8-байтовых данных, как я узнаю, являются ли данные двойной переменной или переменной типа указателя.
movsd
/movss
для загрузки FP иmov
для целочисленных загрузок (в регистры gp) илиmovd
/movq
(в векторные регистры). Загрузки также могут быть операндами памяти для операций АЛУ. - person Peter Cordes   schedule 06.03.2016mov eax, dword [mem]
для загрузки числа с плавающей запятой, даже если он просто сразу же сохраняет его, не выполняя никаких математических вычислений FP. Введите или скопируйте функцию в gcc.godbolt.org и нажмите постоянную ссылку. Мой комментарий не является правильным ответом на вопрос, поскольку вы все еще не можете отличитьint64_t
от указателя. И некоторые компиляторы будут копировать структуры с широкими загрузками/хранениями, которые охватывают несколько более узких членов (например,int
.) - person Peter Cordes   schedule 06.03.2016