Detours是一个字x86机器上拦截任意Win32二进制函数的库。拦截代码在运行时动态的注入。Detours使用用户提供的拦截函数将一个无条件跳转指令替换目标函数起始的少数指令。拦截代码将目标函数替换为跳板函数。跳板函数的地址被放在目标函数指针中。拦截函数能够替换目标函数,也可以在跳板函数中通过目标函数指针作为子调用来执行目标函数,从而扩展目标函数的语义。
Detours在执行的时候被插入。目标函数的代码在内存中被修改,而不是磁盘,因此使其在一个非常精细的粒度中拦截二进制函数。例如,一个可执行程序中的某个DLL中的处理过程被拦截,而同时在其它的可执行程序中的这个DLL中的这个处理过程不会被拦截。不像DLL重链接或静态定向,Detours库中的拦截技术,不论函数是在应用程序中还是系统中,都可以有保障的定位目标函数。
除了基本的拦截功能外,Detours也包含编辑任何库的DLL导入表、附加任意的数据节到已经存在的二进制程序以及为为新进程加载一个DLL的功能。一旦被加载到进程中,被加载的DLL可以拦截这个进程中的任何函数,无论是应用程序库还是像Windows API这样的系统库函数。