【发布时间】:2018-10-02 17:45:58
【问题描述】:
我知道这可能听起来很挑剔,但我想知道这些语义是否有原因。
对我来说,Child 意味着它将传递给它要调用的函数的东西,但是如果你打破函数名称,那么给定的记录将已经存在并且不会改变。该记录显示该函数从其父函数接收到的内容。
假设我在 wmain 上中断并插入几行代码。 windbg 将报告:
# ChildEBP RetAddr Args to Child
00 005dfeb8 009e138b 00000001 00ac9bc0 00acfac8 ASMTests!wmain+0x19
现在这些值不会改变。 当我输入下一个函数 DoBuf0 时,它们不会改变,因此它们实际上不是子级的参数,它们是从父级接收的参数。 例如: 我的 wmain 将“buf0”作为第二个参数传递给 DoBuf0
# ChildEBP RetAddr Args to Child
00 005dfe0c 009e1131 005dfe34 009e218c 005dfe74 ASMTests!DoBuf0
01 005dfeb8 009e138b 00000001 00ac9bc0 00acfac8 ASMTests!wmain+0x91
0:000:x86> da 009e218c
009e218c "buf0"
它们是父 (wmain) 传递给子 (DoBuf0) 的参数,但它们不会显示在父行上,而是显示在子行上。只是从父母那里称他们为 Args 不是更有意义吗?在上面的例子中, args to Child 暗示 DoBuf0 将把它们传递给它的孩子。
谢谢
【问题讨论】:
-
I want to know if there is a reason for these semantics。没有理由。 WinDbg 不是为普通用户设计的,他们需要解释函数参数的来源。我同意描述“来自父母的参数”会更好。 -
"Args from Parent" 也是一个坏名字,因为它们不一定是函数的参数(事实上,在 x64 上它们几乎从来不是)。看我的回答here
标签: windbg