给定块地址WinDbg如何查看堆块的内容

时间:2017-11-11 00:20:16

标签: windows memory windbg heap-memory

我最近正在查看本文(https://www.usenix.org/legacy/event/sec09/tech/full_papers/ratanaworabhan.pdf),其中软件“扫描堆对象 识别有效的x86代码序列。“在过去的几周里,我一直试图让它发挥作用。

到目前为止,我已经足够了,我可以打印rtlallocateheap参数并打印其返回值。 RTLAllocateheap返回已分配的堆块的指针。但是,使用此指针如何识别此位置的块是否是有效的x86代码序列?

我附上了WinDbg图片,以显示我目前所拥有的内容enter image description here

1 个答案:

答案 0 :(得分:0)

使用u <address>进行反汇编:

Allocated 1000 bytes starting at 001a0000
0:003> u 001a0000
001a0000 90              nop
001a0001 90              nop
001a0002 90              nop
001a0003 90              nop
001a0004 31c0            xor     eax,eax
001a0006 90              nop
001a0007 90              nop
001a0008 90              nop

不幸的是,许多字节将导致有效的操作码。对我来说,问题更多:你如何判断这些操作码是无害的还是有害的。

只有当你看到像这里的问号时,你才会知道这不是有效的代码。

0:003> u 5d0000
005d0000 32e3            xor     ah,bl
005d0002 388895280001    cmp     byte ptr [eax+1002895h],cl
005d0008 ee              out     dx,al
005d0009 ff              ???
005d000a ee              out     dx,al
005d000b ff02            inc     dword ptr [edx]