WinDbg包含三个命令:标准命令和元命令(windbg 命令详解)

在调试过程中,始终检查方法的输入和输出,以确定方法是否存在异常。那么,如何在WinDbg中获得该方法的参数值呢。

WinDbg包含三个命令:标准命令和元命令。

K命令可获取堆栈回溯。

在这里,KP可以以函数原型的形式显示参数和参数值,但需要签名。具体而言

如您所见,它显示了几种方法的参数和相应的值。这里是一个例子。

另外,你会发现有些方法即使有记号也不能显示。例如,例如

如果你想看参数值

也可以使用kV命令显示前三个参数。例如:

然后,您可以看到所有方法的参数值。不幸的是,你只能看到三个参数。

既然WinDbg可用,您还可以找到与内存相对应的参数。

在找到内存中参数的位置之前,必须了解方法调用的一些规则。对于这些承诺,我们称之为承诺。

函数调用规则意味着在调用函数时,函数的参数将传递给调用的函数,并将返回值返回给调用函数。

调用函数的规则是说明如何平衡参数和堆栈。当然也有返回值

C/C++是默认的调用规则。

规则:

通过堆栈传输参数

从右向左堆叠

调用方清理参数

Eax的返回值作为方法

规则:

通过堆栈传输参数

从右向左堆叠

由调用方清理参数

Eax的返回值作为方法

规则:

前两个参数分别通过ECX和EDX传递,其他参数保持通过堆栈传递

从右向左堆叠

由调用方清理参数

Eax的返回值作为方法

规则:

前四个参数分别由ECX、EDX、R8、R9传递,其他参数由堆栈传递

从右向左堆叠

由调用方清理参数

Eax的返回值作为方法

 WinDbg包含三个命令:标准命令和元命令(windbg 命令详解) 热门话题

让我们调试并停止代码。看看当前堆栈和参数以及EBP所在的内存地址值。

可以看出,存储器中的EBP的对应值是始发者的值,即,EBP+4对应于当前方法的返回地址,下面是电流法的参数值,与kV命令的输出一致。

另外,可知kV实际上是作为变化函数的3个参数的EBP+0x8、EBP+0xc、EBP+10X10的大致显示。

因此,您可以返回到如何找到参数值。

要从文档复制定义:

然后先看一下寄存器的值。

看看内存值

对于x64应用程序,调用约束是x64约束。也就是说,前四个参数分别存储在ECX、EDX、R8和R9中。我们在这里寻找第二个参数,所以我们可以直接迁移到EDX

其他参数类似。

要查看方法参数:。

通常,可以用KP直接显示。但是,需要符号和参数信息。

如果参数数小于3,则可以将前三个参数显示为kV。

对于多个参数,EBP/EPP的地址只能由DP手动检查,由内存分配手动计算。

通常,使用WinDbg显示参数比较复杂。还有其他直观的工具。

打开文件。因为OD支持x86,所以在这里只使用x86可执行文件进行演示。对于x64,请使用WinDbg。

 WinDbg包含三个命令:标准命令和元命令(windbg 命令详解) 热门话题

 WinDbg包含三个命令:标准命令和元命令(windbg 命令详解) 热门话题

因此,可以快速查看第二个参数的值。


1a

发表评论

Copyright 2002-2022 by 爱雅斋字画(琼ICP备2022001899号-3).All Rights Reserved.