我正在通過Windows系統編程第四版中的一些示例。使用windbg.exe我試圖檢查傳遞給函數(GetCurrentDirectoryA)的參數。以下是來源。使用windbg傳遞給函數的參數檢查
int _tmain (int argc, LPTSTR argv [])
{
/* Buffer to receive current directory allows for the CR,
LF at the end of the longest possible path. */
TCHAR pwdBuffer [DIRNAME_LEN];
DWORD lenCurDir;
lenCurDir = GetCurrentDirectory (DIRNAME_LEN, pwdBuffer);
if (lenCurDir == 0)
ReportError (_T ("Failure getting pathname."), 1, TRUE);
if (lenCurDir > DIRNAME_LEN)
ReportError (_T ("Pathname is too long."), 2, FALSE);
PrintMsg (GetStdHandle (STD_OUTPUT_HANDLE), pwdBuffer);
return 0;
}
首先我使用dv -t -v轉儲局部變量。在這種情況下,我對pwdBuffer感興趣。
0018ff3c int argc = 0n1
0018ff40 char ** argv = 0x00582470
0018fe18 unsigned long lenCurDir = 0x775b994a
0018fe24 char [262] pwdBuffer = char [262] ""
然後,我在Kernel32!GetCurrentDirectoryA上設置了一個斷點。這產生以下結果。
00 0018ff34 00428759 00000001 00582470 005824c0 kernel32!GetCurrentDirectoryA
我不明白的是函數的參數值。我期待將0018fe24看作代表pwdbuffer的一個值。
我接下來要做的就是顧。它執行Kernel32!GetCurrentDirectoryA到最後。 此後,我使用dv -v -t命令轉儲了最初獲得的pwdBuffer值。
0:000> da 0018fe24
0018fe24 "C:\microsoft_press\WSP4_Examples"
0018fe44 "\Utility_4_dll"
這是我期望的緩衝區。所以我的問題是爲什麼我沒有看到這個0018fe24值傳遞給GetCurrentDirectory?
@d_blk:沒有upvote的「thanks」是非常不一致的。 – IInspectable
我決定重新評估我最初接受的答案。您的建議確實爲我提供了搜索信息。然而,在折點處,child-ebp等於結束 – dcrearer