1

附加notepad.exe后,我在windbg中执行了uf命令命令是uf notepad!WinMain我得到以下输出

0:000> uf notepad!WinMain
notepad!WinMain:
0021138d mov     edi,edi
0021138f push    ebp
00211390 mov     ebp,esp
00211392 sub     esp,1Ch
00211395 push    esi
00211396 push    edi
00211397 push    6
002113c8 test    eax,eax
002113ca jl      notepad!WinMain+0x118 (00211c93)

notepad!WinMain+0x43:
002113d0 push    ebx
002113d1 push    dword ptr [ebp+14h]
002113d4 push    edi
002113d5 call    notepad!SkipProgramName (00213170)
002113e5 je      notepad!WinMain+0x10e (00211ca9)

notepad!WinMain+0x5e:
002113eb push    esi
002113ec push    esi
002113ed call    dword ptr [notepad!_imp__GetCurrentProcessId (00211084)]

依此类推..如果您在每条跳转指令之后注意到它会创建一个新块,例如

002113ca jl      notepad!WinMain+0x118 (00211c93)

notepad!WinMain+0x43:

并且在

002113e5 je      notepad!WinMain+0x10e (00211ca9)

notepad!WinMain+0x5e:

所以我想知道WinDbg中的一个设置,我可以在每次跳转时省略创建新块以进行函数反汇编。为什么我不能像使用 U 命令那样获得输出?

所以我正在寻找这样的选择

002113c8 test    eax,eax002113ca 
jl      notepad!WinMain+0x118 (00211c93)
**blank line omitted**
**notepad!WinMain+0x43:** omitted**
002113d0 push    ebx002113d1 push    dword ptr [ebp+14h]

有什么帮助吗?

4

1 回答 1

5

因为函数代码可能分散在您的代码部分中(由链接器决定在哪里放置什么,通常,它最终会将执行最多的部分移动到顶部)

现在,您不在乎您是否对特定功能感兴趣-它只会按顺序转储指令,而uf必须查找所有相关代码块并将它们格式化在一起以使其看起来像一个完整的功能。

编辑:不幸的是(据我所知)windbg 没有立即设置来满足您的需求 - 在这里您可能不得不求助于某种后处理(漂亮的打印脚本来删除空白行和其他任何你需要)。

于 2009-05-25T14:48:47.087 回答