在 Linux 上,strace.so pintool 很好地概述了如何在 PIN 中拦截系统调用。可以监视 的值EAX以查看正在调用哪个系统调用(并且可以以这种方式拦截 mprotect 和 writes)。
我们如何为 Windows 做类似的事情?我看到int 2e中断被用来捕获到内核中,并且系统调用编号在此处给出。是NtWriteFile的类似物write吗?也就是NtProtectVirtualMemory的模拟mprotect?
在 Linux 上,strace.so pintool 很好地概述了如何在 PIN 中拦截系统调用。可以监视 的值EAX以查看正在调用哪个系统调用(并且可以以这种方式拦截 mprotect 和 writes)。
我们如何为 Windows 做类似的事情?我看到int 2e中断被用来捕获到内核中,并且系统调用编号在此处给出。是NtWriteFile的类似物write吗?也就是NtProtectVirtualMemory的模拟mprotect?
Windows 上的 Pintools 还可以帮助您检测系统调用。此外,如果发现 cpu 支持sysenter/ syscall,则使用它们代替int 2e. 但是,这与是否可以进行检测无关。
要回答你的第二个问题,是的,NtReadFile,NtWriteFile和NtDeviceIoControlFile是的* nix中相当于read/ write/ ioctl。