gpt4 book ai didi

windbg - windbg 中有没有一种方法可以创建一个断点,当某个参数传递到堆栈上时该断点将触发?

转载 作者:行者123 更新时间:2023-12-05 04:18:53 30 4
gpt4 key购买 nike

我正在尝试追踪谁在进行特定大小的分配,我尝试使用用户模式堆栈跟踪数据库 (gflags +ust),但由于 FPO,我无法看到整个堆栈。因此,我想在 RtlAllocateHeap 达到我正在寻找的分配大小时设置一个断点。唯一的问题是我似乎无法找到一种方法让它发挥作用。

我最初尝试使用@esi,因为看起来第三个参数是使用这个寄存器传递的,但情况似乎并非总是如此。然后我尝试@ebp-c 给我第三个参数,但它似乎并不总是有效,所以我尝试了@esp+14 也没有用。

无论我做什么,我似乎都无法找到一种方法让它在我想要的时候真正触发。看起来这应该可行,但我猜它在某些情况下使用了叶函数优化,这使我无法做到这一点。

任何人都对如何让它发挥作用有任何想法。

堆堆栈跟踪:

0:013> !heap -p -a 0c060710    
address 0c060710 found in
_HEAP @ 1420000
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
0c0606f8 09c3 0000 [00] 0c060710 04e00 - (busy)
77abb234 ntdll!RtlAllocateHeap+0x00000274
75ee404b ole32!CRetailMalloc_Alloc+0x00000016
76454557 OLEAUT32!APP_DATA::AllocCachedMem+0x00000060
7645476a OLEAUT32!SysAllocStringByteLen+0x0000003d
764547bf OLEAUT32!ErrStringCopyNoNull+0x00000016
764547e3 OLEAUT32!VariantCopy+0x0000007f

断点尝试:

 bp ntdll!RtlAllocateHeap "j @esi == 0x4e00 ''; 'gc'"
bp ntdll!RtlAllocateHeap "j poi(@ebp-c) == 0x4e00 ''; 'gc'"
bp ntdll!RtlAllocateHeap "j poi(@esp+14) == 0x4e00 ''; 'gc'"

最佳答案

我想我已经测试过了:分配大小中断 == 1303

bp ntdll!RtlAllocateHeap "j(poi(@esp+c) = 0x1303) 'k';'gc'"

关于windbg - windbg 中有没有一种方法可以创建一个断点,当某个参数传递到堆栈上时该断点将触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7826130/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com