void CalcProtoSize(Proto
*
proto)
/
/
uleb128不定长, 须计算所有长度
{
unsigned char
*
buf
=
new unsigned char[
4096
];
unsigned char
*
st
=
buf;
WriteU8(buf, proto
-
>ph.flags);
WriteU8(buf, proto
-
>ph.argCnt);
WriteU8(buf, proto
-
>ph.frameSize);
WriteU8(buf, proto
-
>ph.upValueCnt);
WriteUleb128(buf, proto
-
>ph.complexCnt);
WriteUleb128(buf, proto
-
>ph.numericCnt);
WriteUleb128(buf, proto
-
>ph.instructionCnt);
proto
-
>ph.protoSize
=
(buf
-
st)
+
proto
-
>constantsSize
+
proto
-
>instructionsSize;
}
void WriteProtoIntoBuffer(unsigned char
*
& buf, Proto
*
proto)
{
WriteUleb128(buf, proto
-
>ph.protoSize);
WriteU8(buf, proto
-
>ph.flags);
WriteU8(buf, proto
-
>ph.argCnt);
WriteU8(buf, proto
-
>ph.frameSize);
WriteU8(buf, proto
-
>ph.upValueCnt);
WriteUleb128(buf, proto
-
>ph.complexCnt);
WriteUleb128(buf, proto
-
>ph.numericCnt);
WriteUleb128(buf, proto
-
>ph.instructionCnt);
memcpy(buf, proto
-
>instructions, proto
-
>instructionsSize);
buf
+
=
proto
-
>instructionsSize;
memcpy(buf, proto
-
>constants, proto
-
>constantsSize);
buf
+
=
proto
-
>constantsSize;
}
CalcProtoSize(proto);
WriteProtoIntoBuffer(filePtr, proto);