本文主要是介绍[C++]使用FS寄存器判断进程是否被调试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
昨天研究了一下IsDebuggerPresent这个函数的实现代码,发现真的很简单,只有区区4行:
mov eax, dword ptr fs:[018H]
mov eax, dword ptr [eax + 030H]
movzx eax, dword ptr [eax + 02H]
ret
参考了一些大牛的文章,原来第一行是获取TEB的地址,第二行是获取PEB地址,第三行是获得BeingDebugged标记的值,BeingDebugged值为1则进程被调试,值为0则进程没有被调试器附加,于是我写了以下的代码,可以实现和IsDebuggerPresent相同的检测功能:
while (1)
{DWORD dwFS = 0;dwFS = __readfsdword(0x18);dwFS = *(DWORD *)(dwFS + 0x30);dwFS = *(DWORD *)(dwFS + 0x02) & 0x000000FF;printf("%08X\n", dwFS);__asm{mov eax, dword ptr fs:[018H]mov eax, dword ptr [eax + 030H]movzx eax, dword ptr [eax + 02H]mov dwFS, eax}printf("%08X\n", dwFS);system("Pause");
}
使用__readfsdword函数前请#include <intrin.h>
参考了这篇文章,感谢文章作者:http://cxc200026.blog.163.com/blog/static/3426867200841764521515/
这篇关于[C++]使用FS寄存器判断进程是否被调试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!