如何调试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调试我不在行,我也只能说这么多.
不及格的程序员-八神