-c 在这个 Windbg 命令语法中是什么意思?

逆向工程 视窗 风袋
2021-06-25 15:09:02
kd> u win32k!impPsIsThreadTerminating+0xe4-c L5
    |   \              \                \  \   \
   /     \              \                \  \   \
  /       \              \                \  \   \
disassemble\              \                \  \   \
        ModuleName      SymbolName      Offset \   \
                                              ???   \ 
                                                   ObjectCount

那么如何解释-c呢?

1个回答

如果没有任何支持上下文,-c将被视为0xc并将从
win32k!impPsIsThreadTermination+0xe4解析的地址中减去

请注意,只有当您有未优化的构建时,0xe4 才会在大多数情况下正确相关。

因为优化后的函数可以并且会被编译器分成块

并且代码流的最不可能的路径将放置在函数之前或之后

假设 win32k!impPsIsThreadTermination 解析为 0x000000007fffff00
那么如果它是一个未优化的构建
win32k!impPsIsThreadTermination+0xe4将解析为 0x000000007ffffffe4

现在将从该地址中减去 0xc,反汇编命令将从该地址反汇编 5 条指令

0:000> ? vect!main
Evaluate expression: 140699673489328 = 00007ff7`320eefb0

0:000> ? vect!main+e4
Evaluate expression: 140699673489556 = 00007ff7`320ef094

0:000> ? vect!main+e4-c
Evaluate expression: 140699673489544 = 00007ff7`320ef088

0:000> u vect!main+e4-c l5  <<<<<<<<<<<<<


00007ff7`320ef088 30488d          xor     byte ptr [rax-73h],cl <<<< see address
00007ff7`320ef08b 4c2448          and     al,48h
00007ff7`320ef08e e81a63ffff      call    vect!ILT+17320 (00007ff7`320e53ad)
00007ff7`320ef093 eb0a            jmp     vect!main+0xef (00007ff7`320ef09f)
00007ff7`320ef095 488d4c2430      lea     rcx,[rsp+30h]