• windbg 常用命令


    ? ?@@masm(...) 使用MASM表达式
    ?? ?@@c++(...) 使用c++表达式

    C++表达式支持运算符:
    + - * / % mod & and ^ xor l or >> << >>> == <=...
    hi low
    by wo
    dwo pwo
    poi
    取地址&,引用指针*,->,.,::, dynamic_cast,static_cast,const_cast,reinterpret_cast
    ##CONTAINING_RECOARD(Address, Type, Field)
    #FIELD_OFFSET(Type,Filed)
    #RTL_NUMBER_OF(Array)

    注释:$$后的注释以 ; 结束,*后的所有内容都为注释

    /ma ASCII string
    /mu Unicode string
    /msa ANSI_STRING
    /msu UNICODE_STRING
    /e environment string
    /f file data

    固定别名 $u0-$u9
    r $.u0=kernel32!CreateFileW
    .echo $u0
    kernel32!CreateFileW

    as 创建别名
    as kt nt!KiServiceTable
    al 查看所有别名
    ad* 删除别名

    别名的替换规则:
    1.如果别名和命令部分是连续的(dd kt+8 14),那么必须使用${}把别名包装或用空格分隔(dd ${kt}+8 14)
    2.使用固定别名时,不需要大括号包装,dd $u0+8 14

    循环执行:
    !for_each_frame !for_each_local dt @#Local
    j <条件表达式> ['Command1'];['Command2']
    r ecx; j (ecx<2) 'r ecx';'r eax'

    进程与线程限定符:
    |. 当前进程 ~. 当前线程
    |# 导致当前调试事件的进程 ~# 导致当前调试事件的线程
    |* 当前进程的所有进程 ~* 当前进程所有线程
    |Number 序号为Number的进程 ~Number 序号为Number的线程
    |~[PID] 进程ID等于PID的进程 ~~[TID] 线程ID等于TID的线程

    登录会话上下文: !session
    进程上下文: .process .context
    线程上下文: .thread
    局部变量上下文: .frame

    $fnsucc(FnAddress,RetVal,Flag):RetVal作为返回评估函数是否成功,TRUE,FALSE
    $iment(Address):返回模块印象入口地址
    $scmp -1,same-0,1
    $sicmp -1,same-0,1
    $spat 匹配Pattern, match-1,0
    $vvalid(Address,Length) valid-1, invalid-0

    Run Script File
    $<Filename
    $><Filename
    $$<Filename
    $$><Filename
    $$>a<Filename [arg1 arg2 arg3 ...]

    $$>a<D:Debuggerwindbg-scriptscript_createfilew.txt C: est1.txt
    -----------------------------x86---------------------------

    ".block{r @$t0=poi(@esp+0x4);.if (@$t0<10485760){gc;}}"

    bp ntdll!NtCreateFile "as /msu $Name poi(poi(@esp+0xc)+8);.block{.if($spat("${$Name}","*1.txt")){.echo ${$Name}}.else{gc}}"

    bp kernel32!CreateFileW "as /mu $Name poi(@esp+0x4);.block{.if($spat("${$Name}","*1.txt")){.echo ${$Name}}.else{gc}}"

    bp kernel32!CreateFileW "as /mu $Name poi(@esp+0x4);.block{.if($sicmp("${$Name}","C: est1.txt")){gc}.else{.echo ${$Name}}}"

    ------------------------------x64-------------------------------

    bp ntdll!NtCreateFile "as /msu $Name poi(r8+10);.block{.if($spat("${$Name}","*1.txt")){}.else{gc}}"
    bp ntdll!NtCreateFile "as /msu $Name poi(r8+10);.block{.if($sicmp(@"${$Name}",@"C: est1.txt")){gc}.else{}}"
    bp ntdll!NtCreateFile "as /msu $Name poi(r8+10);.block{.echo ${$Name}};gc"

    bp kernel32!CreateFileW "as /mu $Name @rcx;.block{.if($sicmp("${$Name}","C: est1.txt")){gc}.else{.echo ${$Name}}}"

    ---------------------------------------------------------------------------

  • 相关阅读:
    SpringMVC文件下载
    Servlet3.0文件上传
    SpringMVC拦截器的使用(入门)
    SpringMVC文件上传
    SpringMVC后台数据校验
    SpringMVC@InitBinder使用方法
    C++ this指针
    C++ 析构函数
    C++ 构造函数
    C++ 成员函数的实现
  • 原文地址:https://www.cnblogs.com/hanawasakuraki/p/13502828.html
Copyright © 2020-2023  润新知