Re: 如何调试Javascript语言的内存(堆)分配?

WinDbg

如何调试Javascript语言的内存(堆)分配?


merry 2009-10-21, 10:58 上午
如下一段常见的Javascript的spray heap代码,想分析一下它的内存分配方式,
     <script>
     ...
     function spray_heap()
        {
            var payload = "...";
                        
            var ret = 0x0c0c0c0c;
            var heap_chunk_size = 0x40000;
            
            var nops_led_size = heap_chunk_size - (payload.length * 2)
            var nops_led = unescape("%u0c0c%u0c0c");
            while (nop_sled.length < nop_sled_size)
                nop_sled += nop_sled;
                 
            heap_chunks = new Array();
            heap_chunks_num = (ret - heap_chunk_size)/heap_chunk_size;
            for (var i = 0 ; i < heap_chunks_num ; i++)
                heap_chunks = nop_sled + payload;           <=== A
        }
     </script>

     Q:上面代码中执行A句时,如何查看Javascript在堆中分配的堆块数据结构?
     按照一些资料来看,堆块的数据结构大体如下:

      _____________________________________
     |        |         |                  |
     | Header | Length  |                  |
     |________|_________|                  |
     |                                     |
     |                                     |
     |                           __________|
     |                          |     |    |
     |                          |NULL |NULL|
     |__________________________|_____|____|

     因为想验证资料上的数据,所以想用Windbg实际查看一下,但是又不知该如何调试。
     请大家指点,谢谢!
 

Re: 如何调试Javascript语言的内存(堆)分配?


不及格的程序员-八神 2009-11-23, 13:36 下午
针对浏览器的不对 js 引擎 解析js的方式也不同,大部分浏览器都是解释执行的,
而v8则是编译本地码,而这些引擎的实现一般都以c++在背后作一些事情,或者提供一些接口,供外部使用.

如果你想调试具体内存分配的话,我认为你应该根踪相应js引擎模块.
每个浏览器安装目录下都会有相应的dll,你可以试试,对于win32调试我不在行,我也只能说这么多.
不及格的程序员-八神

Powered by Community Server Powered by CnForums.Net