User blog:Sh!ft/Editing BL2 - August Update

http://speedy.sh/PHH2v/GNames.7z

First, I'm not dead. This is a complete dump of the GNames table from BL2 as of today. I have completed my C90 edition of my Unreal Internals Engine. It's written entirely in C and follows the ISO standard rather than the ANSI standard so people on a MAC or LINUX box can also use it. It is written as a library that gets attached and started from another process; this way, its internal functions can just use assembly such as "mov" to read/modify data.

The engine abuses the hell out of the C Macro Preprocessor; in this way, it's primary structs can be changed via a macro that replicates globally. For example, the dump you see above was produced via an alternet header acting on UE3Structures.h. If instead I import UE3StructuresDebug.h, it still creates the standard structures, but it also dynamically generates complete "dbg_STRUCTNAME(FILE f, STRUCTPTR s);" that will automatically select and print out the correct representation of memory blocks in the game.

Now here's where it gets tricky, I also made the structures, the very core structures, completely reconfigurable during execution. In fact, almost nothing is known about the game when the process attaches. Instead, just the fact a struct exists is declared, it then tries to find a usage of that struct, upon successfully doign so, it measures the size of the structs memory block and places a PageGuard/UserFlag (OS dependant protection) on the data. That way, the next time the game calls to write to the struct or read it, our library gets notified. Upon notification, we interrupt the thread momentarily and crawl the thread state back to the throwing method: Using ollydbg's open source asm table, we analyze the memory modification instruction to determine exactly what the struct is defined as. For example, the most common is dword. mov EIX [EDI + 0xF0];  etc. The instruction is addressing a 32 bit unsigned region of data. It becomes unflagged and the struct is updated as such. Unreal is also a script engine, and as a script engine, it needs to be able to dump what went wrong when it goes wrong. We exploit that by asking the unreal engine, "Hey, what's this DWORD at 0xF0 of my struct?" and it hands us back the name "Flags" In this way we can essentially execute independantly of version; independantly of Borderlands updates.

Why did I make it like this? Because, if we as a community want to make mods we can't depend on constant releases from a hacker team like Minecraft users do; we need a core framework which remains unchanging, unflinching and version independant.

Ironically, the design is pretty useful in other games than BL2. IE. I'm currently messing around with the XCOM games and Modern Warfare.

Just food for thought. No word on release time. But, if you're interested yourself and need a starting poitn I attached IDA and let it scan my library's structures/produce a header file for those who want it. You're welcome! Oh and if you wanted a C++ solution, well, sorry but no thanks. C++ tacks on more than I want. It makes COMPLETE engine dumps inherently slow. I dump the engine in less than a millisecond with my C code because it knows exactly where everything it needs to write is. There is no virtual, or overloaded tables, instantiation and so on. Though, the intense memory management I perform even messes with my head sometimes. And I wrote the darn thing.

/*   This file has been generated by IDA.    It contains local type definitions from Borderlands2.i64 */ /* 118 */ typedef unsigned __int32 UINT; /* 119 */ typedef signed __int32 INT; /* 120 */  union QWORD { unsigned __int64 number; struct order { DWORD high; DWORD low; }; }; /* 121 */ typedef char ANSICHAR; /* 122 */ typedef unsigned __int16 UNICHAR; /* 123 */ typedef unsigned __int8 ANSICHARU; /* 124 */ typedef unsigned __int16 UNICHARU; /* 125 */ typedef signed int UBOOL; /* 126 */ typedef unsigned __int32 PTRINT; /* 127 */ typedef unsigned __int32 BITFIELD; /* 128 */ typedef void *VPTR; /* 129 */ typedef void *HINSTANCE; /* 130 */ enum EConstants {  MAXBYTE = 0xFF, MAXWORD = 0xFFFF, MAXDWORD = 0xFFFFFFFF, MAXSBYTE = 0x7F, MAXSWORD = 0x7FFF, MAXINT = 0x7FFFFFFF, INDEX_NONE = 0xFFFFFFFF, UNICODE_BOM = 0xFEFF, DEFAULT_ALIGNMENT = 0x8, CACHE_LINE_SIZE = 0x20, }; /* 131 */ enum EMemoryImageState {  MEMORYIMAGE_NotUsed = 0x0, MEMORYIMAGE_Loading = 0x1, MEMORYIMAGE_Saving = 0x2, MEMORYIMAGE_DebugXMemAlloc = 0x4, }; /* 132 */ enum ECacheBehaviour {  CACHE_Normal = 0x0, CACHE_WriteCombine = 0x1, CACHE_None = 0x2, }; /* 133 */ enum EFileTimes {  FILETIME_Create = 0x0, FILETIME_LastAccess = 0x1, FILETIME_LastWrite = 0x2, }; /* 134 */ enum EFileWrite {  FILEWRITE_NoFail = 0x1, FILEWRITE_NoReplaceExisting = 0x2, FILEWRITE_EvenIfReadOnly = 0x4, FILEWRITE_Unbuffered = 0x8, FILEWRITE_Append = 0x10, FILEWRITE_AllowRead = 0x20, }; /* 135 */ enum EFileRead {  FILEREAD_NoFail = 0x1, }; /* 136 */ enum ECopyCompress {  FILECOPY_Normal = 0x0, FILECOPY_Compress = 0x1, FILECOPY_Decompress = 0x2, }; /* 137 */ enum ECopyResult {  COPY_OK = 0x0, COPY_MiscFail = 0x1, COPY_ReadFail = 0x2, COPY_WriteFail = 0x3, COPY_CompFail = 0x4, COPY_DecompFail = 0x5, COPY_Canceled = 0x6, }; /* 138 */ enum EClassPropertyFlagsLow {  CPF_Edit = 0x1, CPF_Const = 0x2, CPF_Input = 0x4, CPF_ExportObject = 0x8, CPF_OptionalParm = 0x10, CPF_Net = 0x20, CPF_EditConstArray = 0x40, CPF_Parm = 0x80, CPF_OutParm = 0x100, CPF_SkipParm = 0x200, CPF_ReturnParm = 0x400, CPF_CoerceParm = 0x800, CPF_Native = 0x1000, CPF_Transient = 0x2000, CPF_Config = 0x4000, CPF_Localized = 0x8000, CPF_Travel = 0x10000, CPF_EditConst = 0x20000, CPF_GlobalConfig = 0x40000, CPF_Component = 0x80000, CPF_OnDemand = 0x100000, CPF_New = 0x200000, CPF_NeedCtorLink = 0x400000, CPF_NoExport = 0x800000, CPF_NoClear = 0x2000000, CPF_EditInline = 0x4000000, CPF_EdFindable = 0x8000000, CPF_EditInlineUse = 0x10000000, CPF_Deprecated = 0x20000000, CPF_EditInlineNotify = 0x40000000, }; /* 139 */ enum EClassPropertyFlagsHigh {  CPF_RepNotify = 0x1, CPF_Interp = 0x2, CPF_NonTransactional = 0x4, }; /* 140 */ enum EClassPropertyFlagsMask {  CPF_ParmFlags = 0xF90, CPF_PropagateFromStruct = 0x3002, CPF_PropagateToArrayInner = 0x64088008, }; /* 141 */ enum EPropertyType {  CPT_None = 0x0, CPT_Byte = 0x1, CPT_Int = 0x2, CPT_Bool = 0x3, CPT_Float = 0x4, CPT_ObjectReference = 0x5, CPT_Name = 0x6, CPT_Delegate = 0x7, CPT_Range = 0x9, CPT_Struct = 0xA, CPT_Vector = 0xB, CPT_Rotation = 0xC, CPT_String = 0xD, CPT_Map = 0xE, CPT_Array = 0xF, }; /* 142 */ enum EPropertySize {  CPS_BYTE = 0x0, CPSWORD = 0x1, CPS_DWORD = 0x2, CPS_TRIDWORD = 0x3, CPS_QUADDWORD = 0x4, CPS_NEXT_BYTE = 0x5, CPS_NEXT_SHORT = 0x6, CPS_NEXT_INT = 0x7, }; /* 143 */ enum ELoadFlags {  LOAD_None = 0x0, LOAD_NoFail = 0x1, LOAD_NoWarn = 0x2, LOAD_Throw = 0x8, LOAD_Verify = 0x10, LOAD_AllowDll = 0x20, LOAD_DisallowFiles = 0x40, LOAD_NoVerify = 0x80, LOAD_Quiet = 0x2000, LOAD_FindIfFail = 0x4000, LOAD_Propagate = 0x0, }; /* 144 */ enum EPackageFlags {  PKG_AllowDownload = 0x1, PKG_ClientOptional = 0x2, PKG_ServerSideOnly = 0x4, PKG_Cooked = 0x8, PKG_Unsecure = 0x10, PKG_Need = 0x8000, }; /* 145 */ enum EClassFlags {  CLASS_None = 0x0, CLASS_Abstract = 0x1, CLASS_Compiled = 0x2, CLASS_Config = 0x4, CLASS_Transient = 0x8, CLASS_Parsed = 0x10, CLASS_Localized = 0x20, CLASS_SafeReplace = 0x40, CLASS_RuntimeStatic = 0x80, CLASS_NoExport = 0x100, CLASS_Placeable = 0x200, CLASS_PerObjectConfig = 0x400, CLASS_NativeReplication = 0x800, CLASS_EditInlineNew = 0x1000, CLASS_CollapseCategories = 0x2000, CLASS_IsAUProperty = 0x8000, CLASS_IsAUObjectProperty = 0x10000, CLASS_IsAUBoolProperty = 0x20000, CLASS_IsAUState = 0x40000, CLASS_IsAUFunction = 0x80000, CLASS_NeedsDefProps = 0x100000, CLASS_HasComponents = 0x400000, CLASS_Hidden = 0x800000, CLASS_Deprecated = 0x1000000, CLASS_HideDropDown = 0x2000000, CLASS_Exported = 0x4000000, }; /* 146 */ enum EClassMasks {  CLASS_Inherit = 0x14F86EC, CLASS_RecompilerClear = 0x14F8FED, CLASS_ScriptInherit = 0x14FB6EC, }; /* 147 */ enum EObjectFlags {  RF_Transactional = 0x1, RF_Unreachable = 0x2, RF_Public = 0x4, RF_TagImp = 0x8, RF_TagExp = 0x10, RF_Obsolete = 0x20, RF_TagGarbage = 0x40, RF_Final = 0x80, RF_PerObjectLocalized = 0x100, RF_NeedLoad = 0x200, RF_HighlightedName = 0x400, RF_EliminateObject = 0x400, RF_InSingularFunc = 0x800, RF_RemappedName = 0x800, RF_Suppress = 0x1000, RF_StateChanged = 0x1000, RF_InEndState = 0x2000, RF_Transient = 0x4000, RF_Preloading = 0x8000, RF_LoadForClient = 0x10000, RF_LoadForServer = 0x20000, RF_LoadForEdit = 0x40000, RF_Standalone = 0x80000, RF_NotForClient = 0x100000, RF_NotForServer = 0x200000, RF_NotForEdit = 0x400000, RF_Destroyed = 0x800000, RF_NeedPostLoad = 0x1000000, RF_HasStack = 0x2000000, RF_Native = 0x4000000, RF_Marked = 0x8000000, RF_ErrorShutdown = 0x10000000, RF_DebugPostLoad = 0x20000000, RF_DebugSerialize = 0x40000000, RF_DebugDestroy = 0x80000000, }; /* 148 */ enum EObjectMasks {  RF_ContextFlags = 0x700000, RF_LoadContextFlags = 0x70000, RF_Load = 0x67F01A5, RF_Keep = 0xC000100, RF_ScriptMask = 0x784085, }; /* 149 */ enum ProcessEventType {  PE_Toggle = 0x0, PE_Suppress = 0x1, PE_Enable = 0x2, }; /* 150 */ enum EStructFlags {  STRUCT_Native = 0x1, STRUCT_Export = 0x2, STRUCT_HasComponents = 0x4, }; /* 151 */ enum EStateFlags {  STATE_Editable = 0x1, STATE_Auto = 0x2, STATE_Simulated = 0x4, }; /* 152 */ enum EFunctionFlags {  FUNC_Final = 0x1, FUNC_Defined = 0x2, FUNC_Iterator = 0x4, FUNC_Latent = 0x8, FUNC_PreOperator = 0x10, FUNC_Singular = 0x20, FUNC_Net = 0x40, FUNC_NetReliable = 0x80, FUNC_Simulated = 0x100, FUNC_Exec = 0x200, FUNC_Native = 0x400, FUNC_Event = 0x800, FUNC_Operator = 0x1000, FUNC_Static = 0x2000, FUNC_NoExport = 0x4000, FUNC_Const = 0x8000, FUNC_Invariant = 0x10000, FUNC_Public = 0x20000, FUNC_Private = 0x40000, FUNC_Protected = 0x80000, FUNC_Delegate = 0x100000, FUNC_NetServer = 0x200000, }; /* 153 */ enum EFunctionMasks {  FUNC_FuncInherit = 0xA00, FUNC_FuncOverrideMatch = 0xA221D, FUNC_NetFuncFlags = 0xC0, }; /* 154 */ enum EAxis {  AXIS_None = 0x0, AXIS_X = 0x1, AXIS_Y = 0x2, AXIS_Z = 0x4, AXIS_XY = 0x3, AXIS_XZ = 0x5, AXIS_YZ = 0x6, AXIS_XYZ = 0x7, }; /* 155 */ enum ECoordSystem {  COORD_None = 0xFFFFFFFF, COORD_World = 0x0, COORD_Local = 0x1, }; /* 156 */ enum ECallbackType {  CALLBACK_None = 0x0, CALLBACK_Browse = 0x1, CALLBACK_UseCurrent = 0x2, CALLBACK_SelChange = 0x3, CALLBACK_MapChange = 0x4, CALLBACK_ViewportUpdateWindowFrame = 0x5, CALLBACK_SurfProps = 0x6, CALLBACK_ActorProps = 0x7, CALLBACK_SaveMap = 0x8, CALLBACK_SaveMapAs = 0x9, CALLBACK_LoadMap = 0xA, CALLBACK_PlayMap = 0xB, CALLBACK_ChangeEditorMode = 0xC, CALLBACK_RedrawAllViewports = 0xD, CALLBACK_ViewportsDisableRealtime = 0xE, CALLBACK_ActorPropertiesChange = 0xF, CALLBACK_RefreshEditor = 0x10, CALLBACK_DisplayLoadErrors = 0x11, CALLBACK_RtClickAnimSeq = 0x12, CALLBACK_EditorModeEnter = 0x13, CALLBACK_EditorModeExit = 0x14, CALLBACK_UpdateUI = 0x15, CALLBACK_SelectObject = 0x16, CALLBACK_ShowDockableWindow = 0x17, CALLBACK_Undo = 0x18, }; /* 157 */ enum EArchiveFlags {  ARCHIVEF_Bootstrap = 0x1, ARCHIVEF_Compressed = 0x4, }; /* 158 */ enum EThumbnailPrimType {  TPT_None = 0xFFFFFFFF, TPT_Sphere = 0x0, TPT_Cube = 0x1, TPT_Plane = 0x2, TPT_Cylinder = 0x3, }; /* 159 */ enum EExprToken : __int16 {  EX_LocalVariable = 0x0, EX_InstanceVariable = 0x1, EX_DefaultVariable = 0x2, EX_Return = 0x4, EX_Switch = 0x5, EX_Jump = 0x6, EX_JumpIfNot = 0x7, EX_Stop = 0x8, EX_Assert = 0x9, EX_Case = 0xA, EX_Nothing = 0xB, EX_LabelTable = 0xC, EX_GotoLabel = 0xD, EX_EatString = 0xE, EX_Let = 0xF, EX_DynArrayElement = 0x10, EX_New = 0x11, EX_ClassContext = 0x12, EX_MetaCast = 0x13, EX_LetBool = 0x14, EX_Unused = 0x15, EX_EndFunctionParms = 0x16, EX_Self = 0x17, EX_Skip = 0x18, EX_Context = 0x19, EX_ArrayElement = 0x1A, EX_VirtualFunction = 0x1B, EX_FinalFunction = 0x1C, EX_IntConst = 0x1D, EX_FloatConst = 0x1E, EX_StringConst = 0x1F, EX_ObjectConst = 0x20, EX_NameConst = 0x21, EX_RotationConst = 0x22, EX_VectorConst = 0x23, EX_ByteConst = 0x24, EX_IntZero = 0x25, EX_IntOne = 0x26, EX_True = 0x27, EX_False = 0x28, EX_NativeParm = 0x29, EX_NoObject = 0x2A, EX_IntConstByte = 0x2C, EX_BoolVariable = 0x2D, EX_DynamicCast = 0x2E, EX_Iterator = 0x2F, EX_IteratorPop = 0x30, EX_IteratorNext = 0x31, EX_StructCmpEq = 0x32, EX_StructCmpNe = 0x33, EX_UnicodeStringConst = 0x34, EX_StructMember = 0x35, EX_DynArrayLength = 0x36, EX_GlobalFunction = 0x37, EX_PrimitiveCast = 0x38, EX_DynArrayInsert = 0x39, EX_DynArrayRemove = 0x40, EX_DebugInfo = 0x41, EX_DelegateFunction = 0x42, EX_DelegateProperty = 0x43, EX_LetDelegate = 0x44, }; /* 160 */ enum ECastToken : __int16 {  CST_RotatorToVector = 0x39, CST_ByteToInt = 0x3A, CST_ByteToBool = 0x3B, CST_ByteToFloat = 0x3C, CST_IntToByte = 0x3D, CST_IntToBool = 0x3E, CST_IntToFloat = 0x3F, CST_BoolToByte = 0x40, CST_BoolToInt = 0x41, CST_BoolToFloat = 0x42, CST_FloatToByte = 0x43, CST_FloatToInt = 0x44, CST_FloatToBool = 0x45, CST_ObjectToBool = 0x47, CST_NameToBool = 0x48, CST_StringToByte = 0x49, CST_StringToInt = 0x4A, CST_StringToBool = 0x4B, CST_StringToFloat = 0x4C, CST_StringToVector = 0x4D, CST_StringToRotator = 0x4E, CST_VectorToBool = 0x4F, CST_VectorToRotator = 0x50, CST_RotatorToBool = 0x51, CST_ByteToString = 0x52, CST_IntToString = 0x53, CST_BoolToString = 0x54, CST_FloatToString = 0x55, CST_ObjectToString = 0x56, CST_NameToString = 0x57, CST_VectorToString = 0x58, CST_RotatorToString = 0x59, CST_StringToName = 0x60, CST_Max = 0xFF, }; /* 161 */ enum EPollSlowFuncs : __int16 {  EPOLL_Sleep = 0x180, EPOLL_FinishAnim = 0x181, }; /* 162 */ enum EThreadPriority {  TPri_Normal = 0x0, TPri_AboveNormal = 0x1, TPri_BelowNormal = 0x2, }; /* 163 */ enum EPropertyPortFlags {  PPF_Localized = 0x1, PPF_Delimited = 0x2, PPF_CheckReferences = 0x4, }; /* 164 */ struct FPair {  VPTR Key; VPTR Value; }; /* 165 */ struct FMap {  FPair *Data; DWORD ArrayNum; DWORD ArrayMax; DWORD *Hashes; DWORD HashCount; }; /* 166 */ struct FArray {  void *Data; DWORD ArrayNum; DWORD ArrayMax; }; /* 167 */ struct FGuid {  DWORD A;   DWORD B;   DWORD C;   DWORD D; }; /* 168 */ struct FString {  TCHAR *Data; INT Length; INT Limit; }; /* 169 */ struct FName {  NAME_INDEX Index; __int16 Number; __int16 Size; }; /* 170 */ struct FPackageFileSummary {  INT Tag; INT FileVersion; DWORD PackageFlags; INT NameCount; INT NameOffset; INT ExportCount; INT ExportOffset; INT ImportCount; INT ImportOffset; FGuid Guid; FArray Generations; }; /* 171 */ struct FArchiveItem {  FString _Filename_; DWORD Offset; DWORD Size; DWORD Flags; }; /* 172 */ struct FArchiveHeader {  INT Magic; INT TableOffset; INT FileSize; INT Ver; INT CRC; FArray _Items_; }; /* 173 */ struct FArchive {  INT ArVer; INT ArNetVer; INT ArLicenseeVer; UBOOL ArIsLoading; UBOOL ArIsSaving; UBOOL ArIsTrans; UBOOL ArIsPersistent; UBOOL ArForEdit; UBOOL ArForClient; UBOOL ArForServer; UBOOL ArIsError; UBOOL ArIsCriticalError; UBOOL ArContainsCode; INT ArMaxSerializeSize; INT Stopper; }; /* 174 */ struct UObject {  VPTR *VTable; UObject *HashNext; QWORD ObjectFlags; FPointer HashOuterNext; FPointer StateFrame; ULinker *Linker; UINT LinkerIndex; UINT ObjectInternalInteger; UINT NetIndex; UObject *Outer; FName Name; UClass *Class; UObject *ObjectArchetype; }; /* 175 */ struct UComponent {  UObject super; UClass *Template; FName TemplateName; }; /* 176 */ struct UExporter {  UObject super; UClass *SupportedClass; FArray FormatExtension; FArray FormatDescription; INT TextIndent; __int32 bSelectedOnly; }; /* 177 */ struct UFactory {  UObject super; UClass *SupportedClass; UClass *ContextClass; FString Description; FArray Formats; __int32 bText; INT AutoPriority; UBOOL bOKToAll; }; /* 178 */ typedef signed __int32 NAME_INDEX; /* 179 */ typedef unsigned int wchar_t; /* 180 */ typedef void *FPointer; /* 181 */ struct FNameEntry {  NAME_INDEX Index; DWORD Flags; FNameEntry *Next; FNameEntry *Last; TCHAR Name[16]; }; /* 183 */ struct FOutputDevice {  VPTR *VTable; }; /* 184 */ struct FMemStack {  BYTE *Top; BYTE *End; INT DefaultChunkSize; FTaggedMemory *TopChunk; }; /* 185 */ struct FPackageInfo {  FString URL; ULinkerLoad *Linker; UObject *Parent; FGuid Guid; INT FileSize; INT DownloadSize; INT ObjectBase; INT ObjectCount; INT NameBase; INT NameCount; INT LocalGeneration; INT RemoteGeneration; DWORD PackageFlags; }; /* 188 */ struct FRepLink {  UProperty *Property; FRepLink *Next; }; /* 189 */ struct FRepRecord {  UProperty *Property; INT Index; }; /* 190 */ struct FLazyLoader {  FArchive *SavedAr; INT SavedPos; }; /* 191 */ struct FMalloc {  VPTR *VTable; }; /* 192 */ struct FGenerationInfo {  INT ExportCount; INT NameCount; }; /* 193 */ struct FObjectImport {  FName ClassPackage; FName ClassName; INT PackageIndex; FName ObjectName; UObject *XObject; ULinkerLoad *SourceLinker; INT SourceIndex; }; /* 194 */ struct FObjectExport {  INT ClassIndex; INT SuperIndex; INT PackageIndex; FName ObjectName; DWORD ObjectFlags; INT SerialSize; INT SerialOffset; UObject *_Object; INT _iHashNext; FMap ComponentMap; }; /* 195 */ struct FClassNetCache {  FArray RepProperties; INT FieldsBase; FClassNetCache *Super; INT RepConditionCount; UClass *Class; FArray Fields; FMap FieldMap; }; /* 196 */ struct FFieldNetCache {  UField *Field; INT FieldNetIndex; INT ConditionIndex; }; /* 197 */ struct UField {  UObject super; UField *Next; }; /* 198 */ struct UProperty {  UField super; UINT ArrayDim; UINT ElementSize; QWORD PropertyFlags; FName Category; DWORD RepOffset; DWORD RepIndex; DWORD Offset; UProperty *PropertyLinkNext; UProperty *ConfigLinkNext; UProperty *ConstructorLinkNext; UProperty *NextRef; UProperty *RepOwner; BYTE UnknownPad2[8]; }; /* 199 */ struct UClass {  UState super; DWORD ClassFlags; INT ClassUnique; FGuid ClassGuid; UClass* ClassWithin; FName ClassConfigName; FArray ClassReps; FArray NetFields; FArray PackageImports; FArray HideCategories; FArray AutoExpandCategories; FArray DependentOn; FString ClassHeaderFilename; FPointer Constructor; FPointer ClassStaticConstructor; UClass *ComponentOwnerClass; FMap ComponentClassToNameMap; FMap ComponentNameToDefaultObjectMap; FString DefaultPropText; DWORD UnknownDW0; DWORD UnknownDW1; DWORD UnknownDW2; DWORD UnknownDW3; BYTE Unusued16[0x10]; DWORD UnknownDW4; DWORD UnknownDW5; DWORD UnknownDW6; DWORD UnknownDW7; DWORD UnknownDW8; DWORD UnknownDW9; DWORD UnknownDWA; DWORD UnknownDWB; BYTE Unused8[0x08]; }; /* 200 */ struct ULinkerLoad {  ULinker super; FArchive SuperArchive; DWORD LoadFlags; UBOOL Verified; INT ExportHash[256]; FArray LazyLoaders; FArchive *Loader; BYTE Unknown[1112]; }; /* 201 */ struct UConst {  UField super; FString Value; }; /* 202 */ struct UEnum {  UField super; FArray Names; }; /* 203 */ struct UByteProperty {  UProperty super; UEnum *Enum; }; /* 204 */ struct UIntProperty {  UProperty super; }; /* 205 */ struct UBoolProperty {  UProperty super; BITFIELD BitMask; }; /* 206 */ struct UFloatProperty {  UProperty super; }; /* 207 */ struct UObjectProperty {  UProperty super; UClass *PropertyClass; }; /* 208 */ struct UComponentProperty {  UObjectProperty super; }; /* 209 */ struct UClassProperty {  UObjectProperty super; UClass *MetaClass; }; /* 210 */ struct UNameProperty {  UProperty super; }; /* 211 */ struct UStructProperty {  UProperty super; UStruct *Struct; }; /* 212 */ struct UStrProperty {  UProperty super; }; /* 213 */ struct UArrayProperty {  UProperty super; UProperty *Inner; }; /* 214 */ struct UDelegateProperty {  UProperty super; UFunction *Function; DWORD DelegateName; }; /* 215 */ struct UStruct {  UField super; UTextBuffer *ScriptText; UTextBuffer *CppText; UField *SuperField; UField *Children; INT PropertiesSize; FArray Script; FArray Defaults; INT TextPos; INT Line; DWORD StructFlags; INT MinAlignment; UProperty *RefLink; UProperty *PropertyLink; UProperty *ConfigLink; UProperty *ConstructorLink; }; /* 218 */ struct ULinker {  UObject super; UObject *LinkerRoot; FPackageFileSummary Summary; FArray NameMap; FArray ImportMap; FArray ExportMap; INT Success; FString Filename; DWORD _ContextFlags; BYTE Unknown[1208]; }; /* 219 */ struct ULinkerSave {  ULinker super; FArchive SuperArchive; FArchive *Saver; FArray ObjectIndices; FArray NameIndices; BYTE Unknown[56]; }; /* 220 */ struct UPackage {  UObject super; UBOOL Bound; DWORD PackageFlags; UBOOL bDirty; BYTE Unknown[156]; }; /* 221 */ struct USubsystem {  UObject super; FPointer FExec; }; /* 222 */ struct USystem {  USubsystem super; INT LicenseeMode; INT PurgeCacheDays; FString SavePath; FString CachePath; FString CacheExt; FArray Paths; FArray Suppress; FArray Extensions; FArray LocalizationPaths; BYTE Unknown[168]; }; /* 223 */ struct UTextBuffer {  UObject super; INT Pos; INT Top; FString Text; BYTE Unknown[16]; }; /* 224 */ struct URenderDevice {  USubsystem super; UINT MaxTextureSize; }; /* 225 */ struct UPackageMap {  UObject super; FArray List; FMap LinkerMap; FMap ClassFieldIndices; FArray NameIndices; DWORD MaxObjectIndex; DWORD MaxNameIndex; BYTE Unknown[60]; }; /* 226 */ typedef int __w64; /* 227 */ typedef __time64_t time_t; /* 228 */ struct localerefcount {  char *locale; wchar_t *wlocale; int *refcount; int *wrefcount; }; /* 229 */ struct localerefcount locrefcount; /* 230 */ struct threadlocaleinfostruct {  int refcount; unsigned int lc_codepage; unsigned int lc_collate_cp; unsigned int lc_time_cp; locrefcount lc_category[6]; int lc_clike; int mb_cur_max; int *lconv_intl_refcount; int *lconv_num_refcount; int *lconv_mon_refcount; struct lconv *lconv; int *ctype1_refcount; unsigned __int16 *ctype1; const unsigned __int16 *pctype; const unsigned __int8 *pclmap; const unsigned __int8 *pcumap; struct __lc_time_data *lc_time_curr; wchar_t *locale_name[6]; }; /* 231 */ struct _wfinddata32_t {  unsigned int attrib; __time32_t time_create; __time32_t time_access; __time32_t time_write; _fsize_t size; wchar_t name[260]; }; /* 232 */ struct _wfinddata32i64_t {  unsigned int attrib; __time32_t time_create; __time32_t time_access; __time32_t time_write; __int64 size; wchar_t name[260]; }; /* 233 */ struct _wfinddata64i32_t {  unsigned int attrib; __time64_t time_create; __time64_t time_access; __time64_t time_write; _fsize_t size; wchar_t name[260]; }; /* 234 */ struct _wfinddata64_t {  unsigned int attrib; __time64_t time_create; __time64_t time_access; __time64_t time_write; __int64 size; wchar_t name[260]; }; /* 235 */ struct stat {  _dev_t st_dev; _ino_t st_ino; unsigned __int16 st_mode; __int16 st_nlink; __int16 st_uid; __int16 st_gid; _dev_t st_rdev; _off_t st_size; time_t st_atime; time_t st_mtime; time_t st_ctime; }; /* 236 */ typedef struct threadlocaleinfostruct *pthreadlocinfo; /* 237 */ struct localeinfo_struct {  pthreadlocinfo locinfo; pthreadmbcinfo mbcinfo; }; /* 238 */ struct FTaggedMemory {  FTaggedMemory *Next; INT DataSize; BYTE Data[1]; }; /* 239 */ struct SEHRegistrationNode {  int SavedESP; int ExceptionPointers; int Next; int Handler; int EncodedScopeTable; int TryLevel; }; /* 240 */ struct EHRegistrationNode {  int pNext; int frameHandler; int state; }; /* 241 */ struct EHRegistrationNodeCatch {  int SavedESP; int pNext; int frameHandler; int state; }; /* 242 */ struct FOutputDeviceConsole {  int FOutputDevice; }; /* 243 */ struct FOutputDeviceError {  int FOutputDevice; }; /* 247 */ struct UFunction {  UStruct super; DWORD FunctionFlags; DWORD iNative; DWORD RepOffset; FName FriendlyName; int NumParms; int ParmsSize; int ReturnValueOffset; int Func; }; /* 248 */ struct UState {  UStruct super; QWORD ProbeMask; QWORD IgnoreMask; int StateFlags; __int16 LabelTableOffset; FMap FuncMap; DWORD UnknownDWORD0; DWORD UnknownDWORD1; DWORD UnknownDWORD2; DWORD UnknownDWORD3; DWORD UnknownDWORD4; DWORD UnknownDWORD5; WORD UnknownWORD0; }; /* End of file */
 * 1) pragma pack(push, 1)
 * 1) pragma pack(pop)
 * 1) pragma pack(push, 1)
 * 1) pragma pack(pop)
 * 1) pragma pack(push, 1)
 * 1) pragma pack(pop)
 * 1) pragma pack(push, 1)
 * 1) pragma pack(pop)
 * 1) pragma pack(push, 1)
 * 1) pragma pack(pop)
 * 1) pragma pack(push, 1)
 * 1) pragma pack(pop)
 * 1) pragma pack(push, 1)
 * 1) pragma pack(pop)
 * 1) pragma pack(push, 1)
 * 1) pragma pack(pop)
 * 1) pragma pack(push, 1)
 * 1) pragma pack(pop)
 * 1) pragma pack(push, 1)
 * 1) pragma pack(pop)
 * 1) pragma pack(push, 1)
 * 1) pragma pack(pop)
 * 1) pragma pack(push, 1)
 * 1) pragma pack(pop)
 * 1) pragma pack(push, 1)
 * 1) pragma pack(pop)
 * 1) pragma pack(push, 1)
 * 1) pragma pack(pop)
 * 1) pragma pack(push, 1)
 * 1) pragma pack(pop)
 * 1) pragma pack(push, 1)
 * 1) pragma pack(pop)