From 0fa7070742858e4db833b77b8263183c271e2a47 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Thu, 16 Feb 2023 16:12:53 +0800 Subject: [PATCH] finish CKStateChunk analyze --- Documents/ClassOffset.fods | 236 ++++++++++++++++++++++--------------- Documents/Recorder.txt | 85 +++++++++++-- 2 files changed, 215 insertions(+), 106 deletions(-) diff --git a/Documents/ClassOffset.fods b/Documents/ClassOffset.fods index ebbb7f4..72ce6b7 100644 --- a/Documents/ClassOffset.fods +++ b/Documents/ClassOffset.fods @@ -1,20 +1,20 @@ - Tad William2015-06-05T18:17:202023-02-04T22:19:06.714000000PT45SLibreOffice/7.3.7.2$Windows_X86_64 LibreOffice_project/e114eadc50a9ff8d8c8a0567d6da8f454beeb84f116.0300 + Tad William2015-06-05T18:17:202023-02-16T14:33:05.107000000PT2H10M40SLibreOffice/7.3.7.2$Windows_X86_64 LibreOffice_project/e114eadc50a9ff8d8c8a0567d6da8f454beeb84f1316.0300 0 0 - 13026 - 2434 + 18463 + 12171 view1 - 4 - 15 + 2 + 3 2 0 0 @@ -42,7 +42,7 @@ 2 - 19 + 17 2 0 0 @@ -55,7 +55,7 @@ false - CKBufferParser + CKStateChunk 1855 0 100 @@ -132,7 +132,9 @@ - + + + @@ -559,11 +561,23 @@ + + + + + + + + + + + + - + @@ -571,62 +585,21 @@ - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -651,11 +624,24 @@ + + + + + + + + + + + + + @@ -711,12 +697,12 @@ - + - - - - + + + + offset @@ -1048,11 +1034,10 @@ - - - - - + + + + offset @@ -1090,13 +1075,13 @@ - + 2 - + DWORD - + need_free_manuall @@ -1151,26 +1136,26 @@ - + 1 - + int - + data size in DWORD (*4 for byte) - + 2 - - DWORD** + + DWORD* - - pointer to pointer of data + + pointer of data @@ -1182,7 +1167,7 @@ WORD - data version, LowWord + data version, LowWord. HIGH BYTE served for CK_CLASSID. @@ -1194,19 +1179,19 @@ WORD - chunk bersion, HighWord + chunk bersion, HighWord. HIGH BYTE served for PropFlags - + 4 - - DWORD* + + CKStateChunkParser* - - pointer to current pos(in DWROD) may have complex struct (0xCh) + + pointer to parser (0xCh) @@ -1217,7 +1202,9 @@ XArray* like - + + WriteObjectID use this + @@ -1227,7 +1214,9 @@ XArray* like - + + WriteSubChunk use this + @@ -1237,7 +1226,9 @@ XArray* like - + + WriteManagerInt use this + @@ -1264,7 +1255,7 @@ - some unknow struct + CKStateChunkArray @@ -1282,33 +1273,88 @@ - + 0 - CK_CLASSID + DWORD - the class identifier + the size of this array + + + + + + 1 + + + DWORD + + + allocated size + + + + + + 2 + + + DWORD* + + + data buffer + + + CKStateChunkParser + + + + - 4 + 0 - int + DWORD - max size + the current position of this buffer. - + + + 1 + + + DWORD + + + the size of this buffer + + + + + + 2 + + + DWORD + + + previous identifier position + + + + diff --git a/Documents/Recorder.txt b/Documents/Recorder.txt index ea8ebff..26b6b3a 100644 --- a/Documents/Recorder.txt +++ b/Documents/Recorder.txt @@ -41,12 +41,17 @@ struct XArray { DWORD* m_End; // reserved end {secret} DWORD* m_AllocatedEnd; -} +}; +struct XIntArray { + int* m_Begin; + int* m_End; + int* m_AllocatedEnd; +}; struct XClassArray { DWORD* m_Begin; DWORD* m_End; DWORD* m_AllocatedEnd; -} +}; struct XSArray { DWORD* m_Begin; DWORD* m_End; @@ -126,21 +131,79 @@ struct VxMemoryMappedFile { DWORD m_errCode; }; +struct CKStateChunkParser { + DWORD m_CurrentPos; + DWORD m_DataSize; + DWORD m_PrevIdentifierPos; +}; +struct IntListStruct { + DWORD m_Count; + DWORD m_Allocated; + DWORD* m_pData; +}; +struct CKStateChunkProp { + WORD m_DataVersion; + WORD m_ChunkVersion; +}; +struct CKStateChunk { + CK_CLASSID m_ClassId; + + DWORD m_DataDwordSize; + DWORD* m_pData; + + CKStateChunkProp m_ChunkProps; + + CKStateChunkParser* m_Parser; + + IntListStruct* m_ObjectIdList; + IntListStruct* m_SubChunkList; + IntListStruct* m_ManagerIntList; + + CKFile* m_BindFile; + DWORD m_unknow; +}; + struct CKBufferParser { - char* m_ReaderBegin; - DWORD m_ReaderPos; + char* m_MemBegin; + DWORD m_MemPos; CKBOOL m_NeedManualFree; - DWORD m_ReaderSize; + DWORD m_MemSize; +}; + +struct XArray_CKFileObject_ { + CKFileObject* m_Begin; + CKFileObject* m_End; + CKFileObject* m_AllocatedEnd; +}; +struct XArray_CKFileManagerData_ { + CKFileManagerData* m_Begin; + CKFileManagerData* m_End; + CKFileManagerData* m_AllocatedEnd; +}; +struct XClassArray_CKFilePluginDependencies_ { + CKFilePluginDependencies* m_Begin; + CKFilePluginDependencies* m_End; + CKFilePluginDependencies* m_AllocatedEnd; +}; +struct XClassArray_XIntArray_ { + XIntArray* m_Begin; + XIntArray* m_End; + XIntArray* m_AllocatedEnd; +}; +struct XClassArray_XString_ { + XString* m_Begin; + XString* m_End; + XString* m_AllocatedEnd; }; struct CKFile { // 0 int m_SaveIDMax; // Maximum CK_ID found when saving or loading objects {secret} - XArray/**/ m_FileObjects; // List of objects being saved / loaded {secret} - XArray/**/ m_ManagersData; // Manager Data loaded {secret} - XClassArray/**/ m_PluginsDep; // Plugins dependencies for this file {secret} - XClassArray/**/ m_IndexByClassId; // List of index in the m_FileObjects table sorted by ClassID {secret} - XClassArray/**/ m_IncludedFiles; // List of files that should be inserted in the CMO file. {secret} + XArray_CKFileObject_ m_FileObjects; // List of objects being saved / loaded {secret} + XArray_CKFileManagerData_ m_ManagersData; // Manager Data loaded {secret} + XClassArray_CKFilePluginDependencies_ m_PluginsDep; // Plugins dependencies for this file {secret} + XClassArray_XIntArray_ m_IndexByClassId; // List of index in the m_FileObjects table sorted by ClassID {secret} + XClassArray_XString_ m_IncludedFiles; // List of files that should be inserted in the CMO file. {secret} // 16 CKFileInfo m_FileInfo; // Headers summary {secret} // 16 + 14 = 30 @@ -148,7 +211,7 @@ struct CKFile { DWORD unknow_fields; XBitArray m_AlreadySavedMask; // BitArray of IDs already saved {secret} // 30 + 3 = 33 - CKDWORD m_Flags; // Flags used to save file {secret} + CKDWORD m_Flags; // Flags used to save file {secret} CK_LOAD_FLAGS CKSTRING m_FileName; // Current file name {secret} CKContext* m_Context; // CKContext on which file is loaded/Saved {secret} CKBufferParser* m_Parser;