zoukankan      html  css  js  c++  java
  • IsDebuggerPresent原理

    一次面试的问题:你知道IsDebuggerPresent怎么实现的吗

    IsDebuggerPresent实现原理

    IsDebuggerPresent函数反汇编代码:
    mov eax,dword ptr fs:[00000018h]
    mov eax,dword ptr [eax+30h]
    movzx eax,byte ptr [eax+2]
    ret
    fs:[0]是本线程TEB的头部, fs:[18h]是一个指向自身的指针,[eax+30h]就是获得PEB的地址
    0:000> dt -b ntdll!_TEB
    +0x000 NtTib : _NT_TIB
    +0x000 ExceptionList : Ptr32
    +0x004 StackBase : Ptr32
    +0x008 StackLimit : Ptr32
    +0x00c SubSystemTib : Ptr32
    +0x010 FiberData : Ptr32
    +0x010 Version : Uint4B
    +0x014 ArbitraryUserPointer : Ptr32
    +0x018 Self : Ptr32
    +0x01c EnvironmentPointer : Ptr32
    +0x020 ClientId : _CLIENT_ID
    +0x000 UniqueProcess : Ptr32
    +0x004 UniqueThread : Ptr32
    +0x028 ActiveRpcHandle : Ptr32
    +0x02c ThreadLocalStoragePointer : Ptr32
    +0x030 ProcessEnvironmentBlock : Ptr32
    +0x034 LastErrorValue : Uint4B
    PEB结构如下,ptr [eax+2]指的是BeingDebugged的值,1为处于被调试状态,0为未处于
    0:000> dt -b ntdll!_PEB
    +0x000 InheritedAddressSpace : UChar
    +0x001 ReadImageFileExecOptions : UChar
    +0x002 BeingDebugged : UChar
    +0x003 SpareBool : UChar
    +0x004 Mutant : Ptr32
    +0x008 ImageBaseAddress : Ptr32
    +0x00c Ldr : Ptr32
    +0x010 ProcessParameters : Ptr32
     
  • 相关阅读:
    12月10日,小雪
    12月10日,小雪
    BUG
    Twenty Hours
    BUG
    07中华小姐大赛落幕 20岁佳丽曾光夺冠
    Twenty Hours
    jeecg 页面标签规则
    jeecg导入备份
    jeecg查询分页
  • 原文地址:https://www.cnblogs.com/Archimedes/p/15035340.html
Copyright © 2011-2022 走看看