_FINDRESBASE_:
VAR DosHead
VAR NTHead
VAR DataTable
VAR ResBase
VAR MODULEBASEADDR
GMI eip,MODULEBASE
MOV
MODULEBASEADDR,$RESULT
MOV
DosHead,MODULEBASEADDR
MOV
NTHead,[DosHead+3C] //PE HEAD
ADD
NTHead,DosHead
ADD
NTHead,78
MOV
DataTable,NTHead
ADD
DataTable,10
MOV
ResBase,[DataTable]
ADD
ResBase,DosHead
RET
_GETFIXRESADDR_:
VAR ResNumber
VAR StructBase
VAR ResPoint
VAR ResFix_Start
VAR ResFix_End
MOV
StructBase,ResBase //一级目录
ADD
StructBase,10
MOV
ResNumber,[ResBase+0E],2 //获取数量
MOV
Temp,[ResBase+0C],2
ADD
ResNumber,Temp
MOV
ResPoint,[StructBase+4]
AND
ResPoint,7FFFFFFF
ADD
ResPoint,ResBase //二级目录开始
MOV
StructBase,ResPoint
ADD
StructBase,10
MOV
ResPoint,[StructBase+4]
AND
ResPoint,7FFFFFFF
ADD
ResPoint,ResBase //三级目录
MOV
StructBase,ResPoint
ADD
StructBase,10
MOV
ResPoint,[StructBase+4]
ADD
ResPoint,ResBase //定位到第一个指针处
MOV
ResFix_Start,ResPoint
MOV
StructBase,ResBase //一级目录
ADD
StructBase,10
DEC
ResNumber
MUL
ResNumber,8
ADD
StructBase,ResNumber
MOV
ResPoint,[StructBase+4]
AND
ResPoint,7FFFFFFF
ADD
ResPoint,ResBase //二级目录开始
MOV
StructBase,ResPoint
MOV
ResNumber,[StructBase+0E],2 //获取数量
MOV
Temp,[StructBase+0C],2
ADD
ResNumber,Temp
ADD
StructBase,10
DEC
ResNumber
MUL
ResNumber,8
ADD
StructBase,ResNumber
MOV
ResPoint,[StructBase+4]
AND
ResPoint,7FFFFFFF
ADD
ResPoint,ResBase //三级目录
MOV
StructBase,ResPoint
MOV
ResNumber,[StructBase+0E],2 //获取数量
MOV
Temp,[StructBase+0C],2
ADD
ResNumber,Temp
ADD
StructBase,10
DEC
ResNumber
MUL
ResNumber,8
ADD
StructBase,ResNumber
MOV
ResPoint,[StructBase+4]
ADD
ResPoint,ResBase //定位到第一个指针处
MOV
ResFix_End,ResPoint
RET
_FIXRES_:
var Fix_Addr
var Souce_Addr
var Des_Addr
var Res_Size
ASK
"Do you have a place to save fixed Res?IF you input 0,script will alloc"
CMP
$RESULT,0
JNE
HAVE_SPACE
ASK
"input Res Size"
ALLOC $RESULT
HAVE_SPACE:
mov
Des_Addr,$RESULT
mov
Fix_Addr,ResFix_Start
FixResLoop:
mov
Souce_Addr,[Fix_Addr]
add
Souce_Addr,MODULEBASEADDR
mov
Res_Size,[Fix_Addr+4]
MEMCPY Des_Addr,Souce_Addr,Res_Size
mov
[Fix_Addr],Des_Addr
sub
[Fix_Addr],MODULEBASEADDR
add
Fix_Addr,10
add
Des_Addr,Res_Size
inc
Des_Addr
cmp
Fix_Addr,ResFix_End
JBE
FixResLoop
RET