2017-11-11 346 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] 
相關問題