Windbg下查询已知对象被哪些代码使用的思路

已知对象A的内存地址查询哪些代码引用对象A的思路

1首先通过!dumpheap -type xxxx找到指定对象的地址

2 执行!gcroot 查看a的被哪些对象引用

3在内存中搜索A的地址,查看哪些内存是该A对象的指针   s-q 0 L?0xffffffffffffffff value 在0~oxffffffffffffffff 查询指定值 按8个字节

4 在内存中按照Byte的格式搜寻步骤2中所得的结果     s-b 0 L?0xffffffffffffffff value 在0~oxffffffffffffffff 查询指定值 按单字节

5可以将步骤3所得的结果与步骤1中的结果进行差值排查,原因:步骤2所得的都是一些引用了对象A的其他类型对象,而操作对象A时会将对象A的一个指针所在内存地址值存放于调用栈空间或者存在寄存器中,步骤3与步骤2的一些差值很有可能就是这些指针,这些临时指针的地址值会被硬编码在汇编代码中,所以步骤4可以找到这些硬编码所在的内存位置(汇编指令地址),最后执行!U xxxx就能找到对应的汇编代码

上述思路需windbg要一定的运气!!!!如果当前的dump抓得不好,对象的地址也有可能在某个时间被存放与寄存器中,但是抓取dump时寄存器的值被替换,那这种情况下,这种方式就没啥用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值