Windbg的gu和pc命令

时间:2020-03-06 14:50:39  来源:igfitidea点击:

谁能给我示范一下如何在Windbg中使用这两个命令的示例?我在debugger.chm中阅读了文档,但感到困惑。我曾在Google和MSDN中进行过搜索,但没有找到易于学习的示例。

解决方案

根据以下伪代码在功能级别上进行思考:

1  x = 0
 2  y = 0
 3  call 8
 4  x = 5
 5  y = 7
 6  call 8
 7  halt

 8  print x
 9  print y
10  call 12
11  return

12  print x + y
13  print x * y
14  return

这些命令基本上是"运行到事件发生"。该事件导致调试器中断(停止执行并等待命令)。

"gu"命令一直运行,直到上升到下一个最高堆栈级别为止。如果我们在第8、9、10或者11行,则最终会在4或者7行,具体取决于哪个"call 8"调用了该代码。如果我们位于第12、13或者14行,我们将在11点休息。

将此视为一直运行,直到我们将其移到堆栈上为止。请注意,如果我们第一次走下坡路,则必须走两次。

"pc"命令一直运行到下一个调用,因此,如果我们在第1行,它将在第3行中断。这与"gu"相反,因为在我们尝试进入时它会停止降低堆栈级别。

Windbg输出出现问题-"无法继续完成步骤"。这是Windbg和源代码的相关输出,有什么想法吗?

(我在main中设置了一个断点,然后使用p命令两次执行下一步,然后使用gc命令-然后发生错误。)

(204.18c0):中断指令异常代码80000003(第一次机会)
ntdll!DbgBreakPoint:
0000000077ef2aa0 cc int 3 0:000> bp主 0:000>克 断点0命中 TestDebug1!main: 0000000140001090 4057 push rdi
0:000> p
TestDebug1!main + 0x1a:
00000001400010aa c7442424c8000000 mov dword ptr [rsp + 24h],0C8h ss:000000000012feb4 = cccccccc
0:000> p
TestDebug1!main + 0x22:
00000001`400010b2 488d442424 lea rax,[rsp + 24h]
0:000> gc
无法继续完成的步骤

使用命名空间std;

int foo()
{
整数b = 300;

return b;

}

int goo()
{
整数a = 400;

return a;

}

int main()
{
整数a = 200;

int* b = &a;

foo();

a = 400;

goo();

return 0;

}