-
-
[求助]堆调试的一点疑惑
-
发表于:
2019-4-5 19:34
3605
-
各位师傅好,在下今天试着调试堆,参考了网上的一些文章,这里感觉这个比较详细
https://introspelliam.github.io/2017/06/24/0day/%E5%A0%86%E6%BA%A2%E5%87%BA%E7%A0%94%E7%A9%B6%E8%AF%95%E9%AA%8C/
但是总的来说,我申请一块堆内存,获得一个指针指向内存,那个指针的前8字节就是那个堆头了吧。然后我看了下说这个堆头有size,flag等等,看了上面那篇文章也的确如此。但是我在win10 x64 上调试,发现不对啊。很简单的代码,
h1 = HeapAlloc(hp, HEAP_ZERO_MEMORY, 3);
memset(h1, 5, 3);
获得h1地址 h1 0x009c04a0
然后我在内存里面看
>dc 0x009c0498
0x009C0498 63fc51d2 0d002002 00050505 00000000 �Q�c. ..........
0x009C04A8 06fd50b7 00002093 009c00c0 009c00c0 �P�.� ..�.�.�.�.
0x009C04B8 00000000 00000000 00000000 00000000 ................
0x009C04C8 00000000 00000000 00000000 00000000 ................
很奇怪啊,63fc51d2 0d002002这8字节完全不像是那个块首啊。。文章里面是2E100200,那显然0200就是大小,但这里大小的那两个字节是51d2,这就很奇怪了。有没有大佬指点下小弟是什么原因呢?感激不尽。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!