В моем pintool я проверяю системные вызовы NtReadFile () и NtCreateFile (), используя PIN API:
PIN_AddSyscallEntryFunction()
PIN_AddSyscallExitFunction()
Но выходные данные, кажется, загрязнены многими неожиданными дополнительными перехватами, я хотел бы отфильтровать.
Проблема в том, что функции SYSCALL_ENTRY_CALLBACK
не позволяют получить доступ к информации, необходимой для определения того, откуда был создан системный вызов (вызывающий сайт), даже при входе. Проверяя значение REG_EIP
(адрес указателя инструкции) juste перед выполнением системного вызова, я вижу, что я далеко от вызывающего сайта (вне диапазона адресов изображения, которое я обрабатываю, хотя системный вызов сделан в этом изображении).
Я также пытался обработать инструкции с помощью INS_IsSyscall()
на IPOINT_BEFORE
и проверить его адрес, но, похоже, слишком поздно (вне диапазона низких и высоких адресов изображения)
Как правильно обрабатывать только системные вызовы, начиная с изображения, которое я сейчас обрабатываю?