2017-11-11 271 views
0

我最近正在浏览本文(https://www.usenix.org/legacy/event/sec09/tech/full_papers/ratanaworabhan.pdf),其中软件“扫描堆对象 以识别有效的x86代码序列”。在过去的几周里,我一直试图让这个工作。如何查看给定块地址的堆块的内容WinDbg

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

我重视的WinDbg的图像显示什么我到目前为止enter image description here

回答

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] 
相关问题