首页
社区
课程
招聘
========超级字符串,超级数组=========
发表于: 2016-11-11 23:45 3887

========超级字符串,超级数组=========

2016-11-11 23:45
3887

在ODbgScript2脚本调试中,免不了要保存一些中间结果,比如搜索某些关键指令,会返回N个地址如果要保存这些地址,在同一脚本中后续再用的话,没有类似数组或vector等容器的话,还是挺不方便的。本来想自己实现数组或vector,发现有些麻烦,准确的说是功力不够,结果未遂。

然后,就想了一个另类实现的方法,那就是超级字符串。即将所有的中间结果变成字符串连接起来,变成一个超级字符串,取某个中间结果的时候,用DOJS命令的js编程语言的split函数吐出来就好,思路就是这样。

以下就是实现的代码和结果,我测试了一下在脚本环境中,可输出到文本中的字符串长度最大是16376,数组下标最大1819。在js环境中的字符串长度最大至少是224996,数组下标最大至少是24999。

剩下的问题就是你自己如何取下标值用中间结果了。

DOJS原贴 传送门

var     ls="begin",ls2="8fffffff",i=1,c=25000,info
loop:
eval    "var s1='@ls#',s2='@ls2#';s1=s1+'-'+s2;"
$$      $RESULT
mov     ls,$RESULT
inc     i
cmp     i,c
jb      loop
eval    "var s='@ls#';s.length;"
$$      $RESULT
mov     len1,$RESULT
itoa    len1,10.
mov     lens,$RESULT
itoa    c,10.
mov     info, $RESULT
wrta    "d:\tools\output\address2.txt",ls
wrta    "d:\tools\output\address2.txt",""
eval    "var len,a,s1='',s='@ls#';"
eval    "@$RESULT#  a=s.split('-');len=a.length-1;s1+=a[len]+' ,数组下标:['+len+']';"
$$      $RESULT
eval    "完成@info#次循环 , 字符串长度是@lens# , 数组最后一个元素是 @$RESULT# 。"
tmsg    $RESULT,0.
wrta    "d:\tools\output\address2.txt", $RESULT
ret


几次测试结果如图:


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 170
活跃值: (192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
为啥不申请一个内存空间然后保存地址然后直接dump 内存
2016-11-12 00:01
0
雪    币: 465
活跃值: (687)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
个人感觉不如现存现用方便,在同一脚本中再用的话。
2016-11-12 08:34
0
游客
登录 | 注册 方可回帖
返回