WinDbg包含三个命令:标准命令和元命令(windbg 命令详解)
在调试过程中,始终检查方法的输入和输出,以确定方法是否存在异常。那么,如何在WinDbg中获得该方法的参数值呢。
WinDbg包含三个命令:标准命令和元命令。
K命令可获取堆栈回溯。
在这里,KP可以以函数原型的形式显示参数和参数值,但需要签名。具体而言
如您所见,它显示了几种方法的参数和相应的值。这里是一个例子。
另外,你会发现有些方法即使有记号也不能显示。例如,例如
如果你想看参数值
也可以使用kV命令显示前三个参数。例如:
然后,您可以看到所有方法的参数值。不幸的是,你只能看到三个参数。
既然WinDbg可用,您还可以找到与内存相对应的参数。
在找到内存中参数的位置之前,必须了解方法调用的一些规则。对于这些承诺,我们称之为承诺。
函数调用规则意味着在调用函数时,函数的参数将传递给调用的函数,并将返回值返回给调用函数。
调用函数的规则是说明如何平衡参数和堆栈。当然也有返回值
C/C++是默认的调用规则。
规则:
通过堆栈传输参数
从右向左堆叠
调用方清理参数
Eax的返回值作为方法
规则:
通过堆栈传输参数
从右向左堆叠
由调用方清理参数
Eax的返回值作为方法
规则:
前两个参数分别通过ECX和EDX传递,其他参数保持通过堆栈传递
从右向左堆叠
由调用方清理参数
Eax的返回值作为方法
规则:
前四个参数分别由ECX、EDX、R8、R9传递,其他参数由堆栈传递
从右向左堆叠
由调用方清理参数
Eax的返回值作为方法
让我们调试并停止代码。看看当前堆栈和参数以及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。
因此,可以快速查看第二个参数的值。
1a
发表评论