Я пытаюсь использовать Intel Pintool для мониторинга инструкций CALL
и RET
на машине x86-64 (Mac Pro). Я передаю IARG_INST_PTR
(упомянутый ниже) функции docount
и с помощью указателя инструкций вывожу инструкцию, проверяя код операции (CALL
— это 0xe8, а RET
— это 0xc3 из Intel x86- Руководство 64. Однако кажется, что эта проверка не совсем точна, поскольку я замечаю большее количество RET
, чем CALL
для любого данного двоичного файла, оснащенного этой логикой.
INS_InsertCall(ins, IPOINT_BEFORE, (AFUNPTR)docount, IARG_CONTEXT,
IARG_INST_PTR, IARG_END);
Может ли кто-нибудь дать мне несколько советов относительно того, что я делаю неправильно?
Я позаимствовал шаблон у /tools/ManualExamples/inscount0.cpp
. Чтобы найти его, найдите имя файла здесь.
ret
, чемcall
? если (а) вернуть 1; иначе, если (б) вернуть 2; иначе вернуть 3; внутренняя функция может генерировать несколькоret
- person Severin Pappadeux   schedule 18.04.2015ipconfig.exe
):CALL: 176298
,RET: 170374
. Я все еще пытаюсь понять, почему (хотя это может быть связано с внутренними компонентами системы). Я попытаюсь создать пин-инструмент для регистрации, возможно, непарных пар CALL/RET. У тебя есть мой +1! - person Neitsa   schedule 25.04.2015[*] Call count: 66282 [*] Ret count: 66280
Для программы hello_world количество равно[*] Call count: 44846 [*] Ret count: 44845
. - person kaushik   schedule 25.04.2015