注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

且行且记录

点滴记录,行的更远!

 
 
 

日志

 
 

调试一下定位js脚本整型变量地址  

2014-08-11 09:39:03|  分类: 一些练习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

以前一直想一个问题,脚本是解释执行的,他的变量在内存中的地址如何定位?

之前也试过各种办法,都没成功。因为对解释执行不了解,做了很多无用功。

前两天调试了一下js脚本中的变量在内存中的地址。这里用整形变量做例子,

以后再研究其他类型,如字符串,对象等。

调试cdb wscript.exe nadd.js

//nadd.js

f();
function f()
{
WScript.echo("begin");
var k;
k=0x11223344;
WScript.echo(k);
k+=0x44332211;
WScript.echo(k);
k=0x31313131;
k+=0x11111111;
WScript.echo(k);
WScript.echo("end");
}

通过搜索找到一些相关数据,

s -d 0 l01000000 11223344
0013ea3c  11223344 00000000 00000008 00182358  D3".........X#..
00182360  11223344 00000000 abababab abababab  D3".............
00489b40  11223344 00000000 00150084 40000060  D3".........`..@
00489b70  11223344 00000000 baad0000 baadf00d  D3".............

因为有很多的副本,所以通过脚本计算算出一个值0x55555555,然后再搜索这个值排除一些。

s -d 0 l01000000 55555555

然后下内存写入断点排除不是的,最后定位到下面备注的地方,就是加法所在地。

jscript!CScriptRuntime::Run+0xfd5:
3e368887 6683ff03        cmp     di,3
3e36888b 0f851c6f0000    jne     jscript!CScriptRuntime::Run+0x1014 (3e36f7ad)
3e368891 8b4608          mov     eax,dword ptr [esi+8] <-----这里可以看到地址
3e368894 8bf8            mov     edi,eax
3e368896 897dd4          mov     dword ptr [ebp-2Ch],edi
3e368899 8b4ddc          mov     ecx,dword ptr [ebp-24h]
【3e36889c】 03c1            add     eax,ecx <--------这里对应数值加法
3e36889e 894608          mov     dword ptr [esi+8],eax

00 0013eef8 3e3713ab jscript!CScriptRuntime::Run+0xfdb
01 0013efe0 3e3712e5 jscript!ScrFncObj::CallWithFrameOnStack+0xff
02 0013f02c 3e374aac jscript!ScrFncObj::Call+0x8f
03 0013f0b0 3e3728c5 jscript!NameTbl::InvokeInternal+0x137
04 0013f0e4 3e374f93 jscript!VAR::InvokeByDispID+0x17c
05 0013f280 3e3713ab jscript!CScriptRuntime::Run+0x2abe
06 0013f368 3e3712e5 jscript!ScrFncObj::CallWithFrameOnStack+0xff
07 0013f3b4 3e371113 jscript!ScrFncObj::Call+0x8f
08 0013f430 3e353ea3 jscript!CSession::Execute+0x175
09 0013f478 3e353ca2 jscript!COleScript::ExecutePendingScripts+0x1c0
0a 0013f498 01001dbe jscript!COleScript::SetScriptState+0x98


3e38f31e 66c7000300      mov     word ptr [eax],3
3e38f323 8b4b4c          mov     ecx,dword ptr [ebx+4Ch]
3e38f326 8b11            mov     edx,dword ptr [ecx]
【3e38f328】 895008          mov     dword ptr [eax+8],edx <-----这里对应初始化
0:000> u
jscript!CScriptRuntime::Run+0x36a1:
3e38f32b 83434c04        add     dword ptr [ebx+4Ch],4

00 0013eef8 3e3713ab jscript!CScriptRuntime::Run+0x369e
01 0013efe0 3e3712e5 jscript!ScrFncObj::CallWithFrameOnStack+0xff
02 0013f02c 3e374aac jscript!ScrFncObj::Call+0x8f
03 0013f0b0 3e3728c5 jscript!NameTbl::InvokeInternal+0x137
04 0013f0e4 3e374f93 jscript!VAR::InvokeByDispID+0x17c
05 0013f280 3e3713ab jscript!CScriptRuntime::Run+0x2abe
06 0013f368 3e3712e5 jscript!ScrFncObj::CallWithFrameOnStack+0xff
07 0013f3b4 3e371113 jscript!ScrFncObj::Call+0x8f
08 0013f430 3e353ea3 jscript!CSession::Execute+0x175
09 0013f478 3e353ca2 jscript!COleScript::ExecutePendingScripts+0x1c0
0a 0013f498 01001dbe jscript!COleScript::SetScriptState+0x98

 

从堆栈可以看到解释都在jscript!CScriptRuntime::Run里面

(上面的地址只有变量在函数里才有效,没在函数里的变量无效!)


【2014.8.12】追加

昨天用这个整数付初值下断点的办法,研究了下小数、数组,这样就不用弹出消息框了。

用数组应该更好搜索内存,他们元素的值所在地址,都在间距相等的地方。

  评论这张
 
阅读(132)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017