-
-
========超级字符串,超级数组=========
-
发表于:
2016-11-11 23:45
3889
-
========超级字符串,超级数组=========
在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日开班!