├── .gitignore ├── README.md ├── Source ├── DllPrj.cpp ├── DllPrj.sln ├── DllPrj.vcproj ├── DllPrj.vcxproj ├── DllPrj.vcxproj.filters ├── ExportedClassFunList.obj ├── LEGO1.cpp ├── LEGO1.def ├── LEGO1.h ├── LEGO1.his0 ├── LEGO1_FunList1.cpp ├── LEGO1_FunList10.cpp ├── LEGO1_FunList11.cpp ├── LEGO1_FunList12.cpp ├── LEGO1_FunList13.cpp ├── LEGO1_FunList14.cpp ├── LEGO1_FunList15.cpp ├── LEGO1_FunList16.cpp ├── LEGO1_FunList17.cpp ├── LEGO1_FunList18.cpp ├── LEGO1_FunList19.cpp ├── LEGO1_FunList2.cpp ├── LEGO1_FunList20.cpp ├── LEGO1_FunList21.cpp ├── LEGO1_FunList22.cpp ├── LEGO1_FunList23.cpp ├── LEGO1_FunList3.cpp ├── LEGO1_FunList4.cpp ├── LEGO1_FunList5.cpp ├── LEGO1_FunList6.cpp ├── LEGO1_FunList7.cpp ├── LEGO1_FunList8.cpp ├── LEGO1_FunList9.cpp ├── LEGO1_InitData.cpp ├── LEGO1_data.cpp ├── LEGO1_data.h ├── LEGO1_idata.cpp ├── LEGO1_idata.h ├── LEGO1_rdata.cpp ├── LEGO1_rdata.h ├── LEGO1_text.cpp ├── LEGO1_text.h ├── dllmain.cpp ├── stdafx.cpp ├── stdafx.h └── targetver.h └── Tools ├── DDTools.cpp ├── DDTools.h ├── DebugTools.cpp ├── DebugTools.h ├── LongJump.cpp └── LongJump.h /.gitignore: -------------------------------------------------------------------------------- 1 | Release/ 2 | .vs/ 3 | *.vcxproj.user 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LEGO1 Disassemble 2 | 3 | This is a machine-generated compilable disassembly of LEGO1.DLL from LEGO Island. The x86 assembly is wrapped up in C++ functions and a Visual Studio solution and can be compiled with Microsoft Visual C++ to produce a drop-in replacement DLL for LEGO Island. 4 | 5 | This code has not been documented or made readable in any way, it is mainly to aid the production of a full C++ decompilation of LEGO1.DLL in the near future. However, for all intents and purposes it can be modified, reassembled, and used in-game. 6 | 7 | This was primarily produced by a machine and initially contained some errors that were manually corrected. It is now considered fully functional, but if there are any lingering errors causing issues in gameplay, please report them on the "Issues" tab. 8 | 9 | Releases are on [AppVeyor](https://ci.appveyor.com/project/itsmattkc/lego1disassemble/build/artifacts). 10 | -------------------------------------------------------------------------------- /Source/DllPrj.cpp: -------------------------------------------------------------------------------- 1 | #include "stdafx.h" 2 | #include "LEGO1.h" 3 | 4 | -------------------------------------------------------------------------------- /Source/DllPrj.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.29306.81 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DllPrj", "DllPrj.vcxproj", "{9E2828AA-5773-4C5F-9FFA-B249872961F6}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Win32 = Debug|Win32 11 | Release|Win32 = Release|Win32 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {9E2828AA-5773-4C5F-9FFA-B249872961F6}.Debug|Win32.ActiveCfg = Debug|Win32 15 | {9E2828AA-5773-4C5F-9FFA-B249872961F6}.Debug|Win32.Build.0 = Debug|Win32 16 | {9E2828AA-5773-4C5F-9FFA-B249872961F6}.Release|Win32.ActiveCfg = Release|Win32 17 | {9E2828AA-5773-4C5F-9FFA-B249872961F6}.Release|Win32.Build.0 = Release|Win32 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {B95E4878-CF03-40F8-AE93-13889828366C} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /Source/DllPrj.vcproj: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 15 | 16 | 17 | 18 | 19 | 27 | 30 | 33 | 36 | 39 | 42 | 53 | 56 | 59 | 62 | 71 | 74 | 77 | 80 | 83 | 86 | 89 | 92 | 93 | 102 | 105 | 108 | 111 | 114 | 117 | 128 | 131 | 134 | 137 | 148 | 151 | 154 | 157 | 160 | 163 | 166 | 169 | 170 | 171 | 172 | 173 | 174 | 179 | 182 | 185 | 190 | 191 | 194 | 199 | 200 | 201 | 204 | 207 | 211 | 212 | 215 | 219 | 220 | 221 | 224 | 225 | 226 | 231 | 234 | 235 | 238 | 239 | 240 | 245 | 246 | 249 | 252 | 253 | 256 | 257 | 260 | 261 | 264 | 265 | 268 | 269 | 272 | 273 | 274 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | -------------------------------------------------------------------------------- /Source/DllPrj.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | 14 | {9E2828AA-5773-4C5F-9FFA-B249872961F6} 15 | DllPrj 16 | Win32Proj 17 | 10.0.10586.0 18 | LEGO1 19 | 20 | 21 | 22 | DynamicLibrary 23 | v140 24 | Static 25 | Unicode 26 | true 27 | 28 | 29 | DynamicLibrary 30 | v140 31 | Static 32 | Unicode 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | <_ProjectFileVersion>16.0.29124.152 46 | 47 | 48 | $(SolutionDir)$(Configuration)\ 49 | $(Configuration)\ 50 | true 51 | 52 | 53 | $(SolutionDir)$(Configuration)\ 54 | $(Configuration)\ 55 | false 56 | 57 | 58 | 59 | Disabled 60 | WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) 61 | true 62 | EnableFastChecks 63 | MultiThreadedDebug 64 | Use 65 | Level3 66 | EditAndContinue 67 | 68 | 69 | ExportedClassFunList.obj;%(AdditionalDependencies) 70 | LEGO1.def 71 | true 72 | Windows 73 | MachineX86 74 | 75 | 76 | 77 | 78 | MaxSpeed 79 | true 80 | WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) 81 | MultiThreaded 82 | true 83 | Use 84 | Level3 85 | ProgramDatabase 86 | 87 | 88 | ExportedClassFunList.obj;%(AdditionalDependencies) 89 | LEGO1.def 90 | true 91 | Windows 92 | true 93 | true 94 | MachineX86 95 | false 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | false 106 | 107 | 108 | false 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | Create 141 | Create 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | -------------------------------------------------------------------------------- /Source/DllPrj.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav 15 | 16 | 17 | {4a1e121c-4ca7-42b0-9f43-388cc7998661} 18 | 19 | 20 | {eb5ff76e-06a0-48a5-b66c-78220c03454e} 21 | 22 | 23 | 24 | 25 | Source Files 26 | 27 | 28 | Source Files 29 | 30 | 31 | Source Files 32 | 33 | 34 | Tools 35 | 36 | 37 | Tools 38 | 39 | 40 | Tools 41 | 42 | 43 | LEGO1 44 | 45 | 46 | LEGO1 47 | 48 | 49 | LEGO1 50 | 51 | 52 | LEGO1 53 | 54 | 55 | LEGO1 56 | 57 | 58 | LEGO1 59 | 60 | 61 | LEGO1 62 | 63 | 64 | LEGO1 65 | 66 | 67 | LEGO1 68 | 69 | 70 | LEGO1 71 | 72 | 73 | LEGO1 74 | 75 | 76 | LEGO1 77 | 78 | 79 | LEGO1 80 | 81 | 82 | LEGO1 83 | 84 | 85 | LEGO1 86 | 87 | 88 | LEGO1 89 | 90 | 91 | LEGO1 92 | 93 | 94 | LEGO1 95 | 96 | 97 | LEGO1 98 | 99 | 100 | LEGO1 101 | 102 | 103 | LEGO1 104 | 105 | 106 | LEGO1 107 | 108 | 109 | LEGO1 110 | 111 | 112 | LEGO1 113 | 114 | 115 | LEGO1 116 | 117 | 118 | LEGO1 119 | 120 | 121 | LEGO1 122 | 123 | 124 | LEGO1 125 | 126 | 127 | 128 | 129 | Header Files 130 | 131 | 132 | Header Files 133 | 134 | 135 | Tools 136 | 137 | 138 | Tools 139 | 140 | 141 | Tools 142 | 143 | 144 | LEGO1 145 | 146 | 147 | LEGO1 148 | 149 | 150 | LEGO1 151 | 152 | 153 | LEGO1 154 | 155 | 156 | LEGO1 157 | 158 | 159 | 160 | 161 | LEGO1 162 | 163 | 164 | -------------------------------------------------------------------------------- /Source/ExportedClassFunList.obj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itsmattkc/LEGO1Disassemble/da3a44bfc1b56413bd3ed64c5d8450b31027fb3c/Source/ExportedClassFunList.obj -------------------------------------------------------------------------------- /Source/LEGO1.def: -------------------------------------------------------------------------------- 1 | LIBRARY "LEGO1" 2 | EXPORTS 3 | ??0LegoBackgroundColor@@QAE@PBD0@Z 4 | ??0LegoGameState@@QAE@XZ 5 | ??0LegoWorld@@QAE@XZ 6 | ??0MxAtomId@@QAE@PBDW4LookupMode@@@Z 7 | ??0MxBitmap@@QAE@XZ 8 | ??0MxCore@@QAE@XZ 9 | ??0MxCriticalSection@@QAE@XZ 10 | ??0MxDSAction@@QAE@XZ 11 | ??0MxDSFile@@QAE@PBDK@Z 12 | ??0MxOmniCreateFlags@@QAE@XZ 13 | ??0MxOmniCreateParam@@QAE@PBDPAUHWND__@@AAVMxVideoParam@@VMxOmniCreateFlags@@@Z 14 | ??0MxString@@QAE@ABV0@@Z 15 | ??0MxVideoParam@@QAE@AAV0@@Z 16 | ??0MxVideoParam@@QAE@AAVMxRect32@@PAVMxPalette@@KAAVMxVideoParamFlags@@@Z 17 | ??0MxVideoParam@@QAE@XZ 18 | ??0MxVideoParamFlags@@QAE@XZ 19 | ??1LegoEntity@@UAE@XZ 20 | ??1LegoGameState@@QAE@XZ 21 | ??1LegoWorld@@UAE@XZ 22 | ??1MXIOINFO@@QAE@XZ 23 | ??1MxAtomId@@QAE@XZ 24 | ??1MxBitmap@@UAE@XZ 25 | ??1MxCore@@UAE@XZ 26 | ??1MxCriticalSection@@QAE@XZ 27 | ??1MxDSAction@@UAE@XZ 28 | ??1MxDSFile@@UAE@XZ 29 | ??1MxPresenter@@UAE@XZ 30 | ??1MxString@@UAE@XZ 31 | ??1MxVideoParam@@QAE@XZ 32 | ??4MxAtomId@@QAEAAV0@ABV0@@Z 33 | ??4MxString@@QAEABV0@PBD@Z 34 | ??4MxVideoParam@@QAEAAV0@ABV0@@Z 35 | ??8MxPalette@@QAEEAAV0@@Z 36 | ?BackgroundAudioManager@@YAPAVMxBackgroundAudioManager@@XZ 37 | ?Close@MxDSFile@@UAEJXZ 38 | ?Close@MxStreamer@@QAEJPBD@Z 39 | ?CreateBackgroundAudio@LegoOmni@@QAEXXZ 40 | ?CreateInstance@LegoOmni@@SAXXZ 41 | ?CreatePalette@MxBitmap@@UAEPAVMxPalette@@XZ 42 | ?CreateStreamObject@@YAPAVMxDSObject@@PAVMxDSFile@@F@Z 43 | ?DestroyInstance@MxOmni@@SAXXZ 44 | ?Detach@MxPalette@@QAEXXZ 45 | ?DisableRMDevice@LegoVideoManager@@QAEHXZ 46 | ?DoneTickle@MxPresenter@@MAEXXZ 47 | ?Enable@MxBackgroundAudioManager@@QAEXE@Z 48 | ?Enable@MxPresenter@@UAEXE@Z 49 | ?EnableFullScreenMovie@LegoVideoManager@@QAEXEE@Z 50 | ?EnableRMDevice@LegoVideoManager@@QAEHXZ 51 | ?EndAction@MxPresenter@@UAEXXZ 52 | ?EventManager@@YAPAVMxEventManager@@XZ 53 | ?FlipToGDISurface@MxDirectDraw@@QAEHXZ 54 | ?GameState@@YAPAVLegoGameState@@XZ 55 | ?GetBufferSize@MxDSFile@@UAEKXZ 56 | ?GetCD@MxOmni@@SAPBDXZ 57 | ?GetCurrPathInfo@LegoOmni@@SAHPAPAVLegoPathBoundary@@AAH@Z 58 | ?GetDefaults@LegoNavController@@SAXPAHPAM11111111PAE@Z 59 | ?GetHD@MxOmni@@SAPBDXZ 60 | ?GetInstance@LegoOmni@@SAPAV1@XZ 61 | ?GetInstance@MxOmni@@SAPAV1@XZ 62 | ?GetInstance@MxScheduler@@SAPAV1@XZ 63 | ?GetNoCD_SourceName@@YAPBDXZ 64 | ?GetPartsThreshold@RealtimeView@@SAMXZ 65 | ?GetPrimaryBitDepth@MxDirectDraw@@SAHXZ 66 | ?GetRealTime@MxTimer@@QAEJXZ 67 | ?GetStreamBuffersNum@MxDSFile@@UAEKXZ 68 | ?GetUserMaxLOD@RealtimeView@@SAMXZ 69 | ?GetVariable@MxVariableTable@@QAEPBDPBD@Z 70 | ?Init@MxPresenter@@IAEXXZ 71 | ?InputManager@@YAPAVLegoInputManager@@XZ 72 | ?InvalidateRect@MxVideoManager@@QAEXAAVMxRect32@@@Z 73 | ?IsSound3D@MxOmni@@SAEXZ 74 | ?Lego@@YAPAVLegoOmni@@XZ 75 | ?Load@LegoGameState@@QAEJK@Z 76 | ?MSoundManager@@YAPAVMxSoundManager@@XZ 77 | ?MakeSourceName@@YAXPADPBD@Z 78 | ?MoveCursor@LegoVideoManager@@QAEXHH@Z 79 | ?MusicManager@@YAPAVMxMusicManager@@XZ 80 | ?NotificationManager@@YAPAVMxNotificationManager@@XZ 81 | ?Notify@MxCore@@UAEJAAVMxParam@@@Z 82 | ?Open@MxDSFile@@UAEJK@Z 83 | ?Open@MxStreamer@@QAEPAVMxStreamController@@PBDG@Z 84 | ?ParseExtra@MxPresenter@@MAEXXZ 85 | ?Pause@MxDirectDraw@@QAEHH@Z 86 | ?PickEntity@@YAPAVLegoEntity@@JJ@Z 87 | ?PickROI@@YAPAVLegoROI@@JJ@Z 88 | ?QueueEvent@LegoInputManager@@QAEXW4NotificationId@@EJJE@Z 89 | ?Read@MxBitmap@@UAEJPBD@Z 90 | ?Read@MxDSFile@@UAEJPAEK@Z 91 | ?RealizePalette@MxVideoManager@@UAEJPAVMxPalette@@@Z 92 | ?Register@LegoInputManager@@QAEXPAVMxCore@@@Z 93 | ?RemoveAll@ViewManager@@QAEXPAVViewROI@@@Z 94 | ?RemoveWorld@LegoOmni@@QAEXABVMxAtomId@@J@Z 95 | ?Save@LegoGameState@@QAEJK@Z 96 | ?Seek@MxDSFile@@UAEJJH@Z 97 | ?SerializePlayersInfo@LegoGameState@@QAEXF@Z 98 | ?SerializeScoreHistory@LegoGameState@@QAEXF@Z 99 | ?SetCD@MxOmni@@SAXPBD@Z 100 | ?SetDefaults@LegoNavController@@SAXHMMMMMMMMME@Z 101 | ?SetDeviceName@MxVideoParam@@QAEXPAD@Z 102 | ?SetDisplayBB@LegoROI@@QAEXH@Z 103 | ?SetDoMutex@MxCriticalSection@@SAXXZ 104 | ?SetHD@MxOmni@@SAXPBD@Z 105 | ?SetObjectName@MxDSObject@@QAEXPBD@Z 106 | ?SetOmniUserMessage@@YAXP6AXPBDH@Z@Z 107 | ?SetPartsThreshold@RealtimeView@@SAXM@Z 108 | ?SetSavePath@LegoGameState@@QAEXPAD@Z 109 | ?SetSound3D@MxOmni@@SAXE@Z 110 | ?SetUserMaxLOD@RealtimeView@@SAXM@Z 111 | ?SetVariable@MxVariableTable@@QAEXPAVMxVariable@@@Z 112 | ?SetVariable@MxVariableTable@@QAEXPBD0@Z 113 | ?SetWaitIndicator@MxTransitionManager@@QAEXPAVMxVideoPresenter@@@Z 114 | ?SoundManager@@YAPAVLegoSoundManager@@XZ 115 | ?Start@@YAJPAVMxDSAction@@@Z 116 | ?StartAction@MxPresenter@@UAEJPAVMxStreamController@@PAVMxDSAction@@@Z 117 | ?StartMultiTasking@MxScheduler@@QAEXK@Z 118 | ?Streamer@@YAPAVMxStreamer@@XZ 119 | ?Tickle@MxPresenter@@UAEJXZ 120 | ?TickleManager@@YAPAVMxTickleManager@@XZ 121 | ?Timer@@YAPAVMxTimer@@XZ 122 | ?TransitionManager@@YAPAVMxTransitionManager@@XZ 123 | ?UnRegister@LegoInputManager@@QAEXPAVMxCore@@@Z 124 | ?VariableTable@@YAPAVMxVariableTable@@XZ 125 | ?VideoManager@@YAPAVLegoVideoManager@@XZ 126 | ?configureLegoAnimationManager@LegoAnimationManager@@SAXH@Z 127 | ?configureLegoBuildingManager@LegoBuildingManager@@SAXH@Z 128 | ?configureLegoModelPresenter@LegoModelPresenter@@SAXH@Z 129 | ?configureLegoPartPresenter@LegoPartPresenter@@SAXHH@Z 130 | ?configureLegoROI@LegoROI@@SAXH@Z 131 | ?configureLegoWorldPresenter@LegoWorldPresenter@@SAXH@Z 132 | _DllMain@12 133 | -------------------------------------------------------------------------------- /Source/LEGO1.h: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | Generated by: DFA of DLL to C version 1.82 3 | Date: 2019-9-18 4 | Description: The declaration of functions and variables. 5 | Website: http://www.dll-decompiler.com 6 | Technical Support: support@dll-decompiler.com 7 | *******************************************************************************/ 8 | 9 | #if !defined(D2SL_LEGO1_SUPP_H_00121000_INCLUDED_) 10 | #define D2SL_LEGO1_SUPP_H_00121000_INCLUDED_ 11 | 12 | #if _MSC_VER > 1000 13 | #pragma once 14 | #endif // _MSC_VER > 1000 15 | 16 | #ifdef __cplusplus 17 | extern "C" { 18 | #endif 19 | 20 | 21 | #include 22 | 23 | #include "LEGO1_text.h" 24 | #include "LEGO1_rdata.h" 25 | #include "LEGO1_data.h" 26 | #include "LEGO1_idata.h" 27 | 28 | 29 | #ifdef __cplusplus 30 | } 31 | #endif 32 | 33 | 34 | extern HMODULE g_hLEGO1; 35 | 36 | extern "C" void __0LegoBackgroundColor__QAE_PBD0_Z(); 37 | extern "C" void __0LegoGameState__QAE_XZ(); 38 | extern "C" void __0LegoWorld__QAE_XZ(); 39 | extern "C" void __0MxAtomId__QAE_PBDW4LookupMode___Z(); 40 | extern "C" void __0MxBitmap__QAE_XZ(); 41 | extern "C" void __0MxCore__QAE_XZ(); 42 | extern "C" void __0MxCriticalSection__QAE_XZ(); 43 | extern "C" void __0MxDSAction__QAE_XZ(); 44 | extern "C" void __0MxDSFile__QAE_PBDK_Z(); 45 | extern "C" void __0MxOmniCreateFlags__QAE_XZ(); 46 | extern "C" void __0MxOmniCreateParam__QAE_PBDPAUHWND____AAVMxVideoParam__VMxOmniCreateFlags___Z(); 47 | extern "C" void __0MxString__QAE_ABV0__Z(); 48 | extern "C" void __0MxVideoParam__QAE_AAV0__Z(); 49 | extern "C" void __0MxVideoParam__QAE_AAVMxRect32__PAVMxPalette__KAAVMxVideoParamFlags___Z(); 50 | extern "C" void __0MxVideoParam__QAE_XZ(); 51 | extern "C" void __0MxVideoParamFlags__QAE_XZ(); 52 | extern "C" void __1LegoEntity__UAE_XZ(); 53 | extern "C" void __1LegoGameState__QAE_XZ(); 54 | extern "C" void __1LegoWorld__UAE_XZ(); 55 | extern "C" void __1MXIOINFO__QAE_XZ(); 56 | extern "C" void __1MxAtomId__QAE_XZ(); 57 | extern "C" void __1MxBitmap__UAE_XZ(); 58 | extern "C" void __1MxCore__UAE_XZ(); 59 | extern "C" void __1MxCriticalSection__QAE_XZ(); 60 | extern "C" void __1MxDSAction__UAE_XZ(); 61 | extern "C" void __1MxDSFile__UAE_XZ(); 62 | extern "C" void __1MxPresenter__UAE_XZ(); 63 | extern "C" void __1MxString__UAE_XZ(); 64 | extern "C" void __1MxVideoParam__QAE_XZ(); 65 | extern "C" void __4MxAtomId__QAEAAV0_ABV0__Z(); 66 | extern "C" void __4MxString__QAEABV0_PBD_Z(); 67 | extern "C" void __4MxVideoParam__QAEAAV0_ABV0__Z(); 68 | extern "C" void __8MxPalette__QAEEAAV0__Z(); 69 | extern "C" void _BackgroundAudioManager__YAPAVMxBackgroundAudioManager__XZ(); 70 | extern "C" void _Close_MxDSFile__UAEJXZ(); 71 | extern "C" void _Close_MxStreamer__QAEJPBD_Z(); 72 | extern "C" void _CreateBackgroundAudio_LegoOmni__QAEXXZ(); 73 | extern "C" void _CreateInstance_LegoOmni__SAXXZ(); 74 | extern "C" void _CreatePalette_MxBitmap__UAEPAVMxPalette__XZ(); 75 | extern "C" void _CreateStreamObject__YAPAVMxDSObject__PAVMxDSFile__F_Z(); 76 | extern "C" void _DestroyInstance_MxOmni__SAXXZ(); 77 | extern "C" void _Detach_MxPalette__QAEXXZ(); 78 | extern "C" void _DisableRMDevice_LegoVideoManager__QAEHXZ(); 79 | extern "C" void _DoneTickle_MxPresenter__MAEXXZ(); 80 | extern "C" void _Enable_MxBackgroundAudioManager__QAEXE_Z(); 81 | extern "C" void _Enable_MxPresenter__UAEXE_Z(); 82 | extern "C" void _EnableFullScreenMovie_LegoVideoManager__QAEXEE_Z(); 83 | extern "C" void _EnableRMDevice_LegoVideoManager__QAEHXZ(); 84 | extern "C" void _EndAction_MxPresenter__UAEXXZ(); 85 | extern "C" void _EventManager__YAPAVMxEventManager__XZ(); 86 | extern "C" void _FlipToGDISurface_MxDirectDraw__QAEHXZ(); 87 | extern "C" void _GameState__YAPAVLegoGameState__XZ(); 88 | extern "C" void _GetBufferSize_MxDSFile__UAEKXZ(); 89 | extern "C" void _GetCD_MxOmni__SAPBDXZ(); 90 | extern "C" void _GetCurrPathInfo_LegoOmni__SAHPAPAVLegoPathBoundary__AAH_Z(); 91 | extern "C" void _GetDefaults_LegoNavController__SAXPAHPAM11111111PAE_Z(); 92 | extern "C" void _GetHD_MxOmni__SAPBDXZ(); 93 | extern "C" void _GetInstance_LegoOmni__SAPAV1_XZ(); 94 | extern "C" void _GetInstance_MxOmni__SAPAV1_XZ(); 95 | extern "C" void _GetInstance_MxScheduler__SAPAV1_XZ(); 96 | extern "C" void _GetNoCD_SourceName__YAPBDXZ(); 97 | extern "C" void _GetPartsThreshold_RealtimeView__SAMXZ(); 98 | extern "C" void _GetPrimaryBitDepth_MxDirectDraw__SAHXZ(); 99 | extern "C" void _GetRealTime_MxTimer__QAEJXZ(); 100 | extern "C" void _GetStreamBuffersNum_MxDSFile__UAEKXZ(); 101 | extern "C" void _GetUserMaxLOD_RealtimeView__SAMXZ(); 102 | extern "C" void _GetVariable_MxVariableTable__QAEPBDPBD_Z(); 103 | extern "C" void _Init_MxPresenter__IAEXXZ(); 104 | extern "C" void _InputManager__YAPAVLegoInputManager__XZ(); 105 | extern "C" void _InvalidateRect_MxVideoManager__QAEXAAVMxRect32___Z(); 106 | extern "C" void _IsSound3D_MxOmni__SAEXZ(); 107 | extern "C" void _Lego__YAPAVLegoOmni__XZ(); 108 | extern "C" void _Load_LegoGameState__QAEJK_Z(); 109 | extern "C" void _MSoundManager__YAPAVMxSoundManager__XZ(); 110 | extern "C" void _MakeSourceName__YAXPADPBD_Z(); 111 | extern "C" void _MoveCursor_LegoVideoManager__QAEXHH_Z(); 112 | extern "C" void _MusicManager__YAPAVMxMusicManager__XZ(); 113 | extern "C" void _NotificationManager__YAPAVMxNotificationManager__XZ(); 114 | extern "C" void _Notify_MxCore__UAEJAAVMxParam___Z(); 115 | extern "C" void _Open_MxDSFile__UAEJK_Z(); 116 | extern "C" void _Open_MxStreamer__QAEPAVMxStreamController__PBDG_Z(); 117 | extern "C" void _ParseExtra_MxPresenter__MAEXXZ(); 118 | extern "C" void _Pause_MxDirectDraw__QAEHH_Z(); 119 | extern "C" void _PickEntity__YAPAVLegoEntity__JJ_Z(); 120 | extern "C" void _PickROI__YAPAVLegoROI__JJ_Z(); 121 | extern "C" void _QueueEvent_LegoInputManager__QAEXW4NotificationId__EJJE_Z(); 122 | extern "C" void _Read_MxBitmap__UAEJPBD_Z(); 123 | extern "C" void _Read_MxDSFile__UAEJPAEK_Z(); 124 | extern "C" void _RealizePalette_MxVideoManager__UAEJPAVMxPalette___Z(); 125 | extern "C" void _Register_LegoInputManager__QAEXPAVMxCore___Z(); 126 | extern "C" void _RemoveAll_ViewManager__QAEXPAVViewROI___Z(); 127 | extern "C" void _RemoveWorld_LegoOmni__QAEXABVMxAtomId__J_Z(); 128 | extern "C" void _Save_LegoGameState__QAEJK_Z(); 129 | extern "C" void _Seek_MxDSFile__UAEJJH_Z(); 130 | extern "C" void _SerializePlayersInfo_LegoGameState__QAEXF_Z(); 131 | extern "C" void _SerializeScoreHistory_LegoGameState__QAEXF_Z(); 132 | extern "C" void _SetCD_MxOmni__SAXPBD_Z(); 133 | extern "C" void _SetDefaults_LegoNavController__SAXHMMMMMMMMME_Z(); 134 | extern "C" void _SetDeviceName_MxVideoParam__QAEXPAD_Z(); 135 | extern "C" void _SetDisplayBB_LegoROI__QAEXH_Z(); 136 | extern "C" void _SetDoMutex_MxCriticalSection__SAXXZ(); 137 | extern "C" void _SetHD_MxOmni__SAXPBD_Z(); 138 | extern "C" void _SetObjectName_MxDSObject__QAEXPBD_Z(); 139 | extern "C" void _SetOmniUserMessage__YAXP6AXPBDH_Z_Z(); 140 | extern "C" void _SetPartsThreshold_RealtimeView__SAXM_Z(); 141 | extern "C" void _SetSavePath_LegoGameState__QAEXPAD_Z(); 142 | extern "C" void _SetSound3D_MxOmni__SAXE_Z(); 143 | extern "C" void _SetUserMaxLOD_RealtimeView__SAXM_Z(); 144 | extern "C" void _SetVariable_MxVariableTable__QAEXPAVMxVariable___Z(); 145 | extern "C" void _SetVariable_MxVariableTable__QAEXPBD0_Z(); 146 | extern "C" void _SetWaitIndicator_MxTransitionManager__QAEXPAVMxVideoPresenter___Z(); 147 | extern "C" void _SoundManager__YAPAVLegoSoundManager__XZ(); 148 | extern "C" void _Start__YAJPAVMxDSAction___Z(); 149 | extern "C" void _StartAction_MxPresenter__UAEJPAVMxStreamController__PAVMxDSAction___Z(); 150 | extern "C" void _StartMultiTasking_MxScheduler__QAEXK_Z(); 151 | extern "C" void _Streamer__YAPAVMxStreamer__XZ(); 152 | extern "C" void _Tickle_MxPresenter__UAEJXZ(); 153 | extern "C" void _TickleManager__YAPAVMxTickleManager__XZ(); 154 | extern "C" void _Timer__YAPAVMxTimer__XZ(); 155 | extern "C" void _TransitionManager__YAPAVMxTransitionManager__XZ(); 156 | extern "C" void _UnRegister_LegoInputManager__QAEXPAVMxCore___Z(); 157 | extern "C" void _VariableTable__YAPAVMxVariableTable__XZ(); 158 | extern "C" void _VideoManager__YAPAVLegoVideoManager__XZ(); 159 | extern "C" void _configureLegoAnimationManager_LegoAnimationManager__SAXH_Z(); 160 | extern "C" void _configureLegoBuildingManager_LegoBuildingManager__SAXH_Z(); 161 | extern "C" void _configureLegoModelPresenter_LegoModelPresenter__SAXH_Z(); 162 | extern "C" void _configureLegoPartPresenter_LegoPartPresenter__SAXHH_Z(); 163 | extern "C" void _configureLegoROI_LegoROI__SAXH_Z(); 164 | extern "C" void _configureLegoWorldPresenter_LegoWorldPresenter__SAXH_Z(); 165 | extern "C" void _DllMain_12(); 166 | 167 | /* All the not exported functions redirect to this function. */ 168 | void _LEGO1_NotExported(); 169 | 170 | #endif // !defined(D2SL_LEGO1_SUPP_H_00121000_INCLUDED_) -------------------------------------------------------------------------------- /Source/LEGO1.his0: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/itsmattkc/LEGO1Disassemble/da3a44bfc1b56413bd3ed64c5d8450b31027fb3c/Source/LEGO1.his0 -------------------------------------------------------------------------------- /Source/LEGO1_idata.cpp: -------------------------------------------------------------------------------- 1 | #include "stdafx.h" 2 | #include "LEGO1.h" 3 | 4 | #pragma pack(push) 5 | #pragma pack(1) 6 | 7 | #ifdef __cplusplus 8 | extern "C" 9 | #endif 10 | __declspec(align(16)) 11 | _st_LEGO1_idata LEGO1_idata = { 12 | //UCHAR m0[0x328], 0x1010B000 13 | {0xDC,0xB2,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCA,0xB5,0x10,0x00,'P',0xB5,0x10,0x00,0xC0,0xB0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEA,0xB5,0x10,0x00,'4',0xB3,0x10,0x00,0x10,0xB1,0x10,0x00,0x00,0x00,0x00,0x00,0x00, 14 | 0x00,0x00,0x00,0xCA,0xBB,0x10,0x00,0x84,0xB3,0x10,0x00,0x94,0xB2,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,'`',0xBC,0x10,0x00,0x08,0xB5,0x10,0x00,0xD0,0xB0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBD,0x10,0x00,'D',0xB3,0x10, 15 | 0x00,0xC8,0xB0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0xBE,0x10,0x00,'<',0xB3,0x10,0x00,0xB4,0xB0,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,'J',0xBE,0x10,0x00,'(',0xB3,0x10,0x00,0x1C,0xB3,0x10,0x00,0x00,0x00,0x00,0x00,0x00, 16 | 0x00,0x00,0x00,0xFC,0xBF,0x10,0x00,0x90,0xB5,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,'2',0xBE,0x10,0x00,0x1E,0xBE,0x10,0x00,0x00,0x00,0x00,0x00,0xD4,0xB5,0x10,0x00,0x00,0x00,0x00, 17 | 0x00,0xFE,0xBD,0x10,0x00,0x00,0x00,0x00,0x00,0xB0,0xBF,0x10,0x00,0xC0,0xBF,0x10,0x00,0xA0,0xBF,0x10,0x00,0xAE,0xBC,0x10,0x00,'|',0xBC,0x10,0x00,'l',0xBC,0x10,0x00,0x8A,0xBC,0x10,0x00,0xDC,0xBC,0x10,0x00,0xF2,0xBC,0x10,0x00,0xCC,0xBC,0x10,0x00,0xBC, 18 | 0xBC,0x10,0x00,'d',0xBF,0x10,0x00,'~',0xBF,0x10,0x00,0xA2,0xBC,0x10,0x00,0x90,0xBF,0x10,0x00,0x00,0x00,0x00,0x00,0xD8,0xB6,0x10,0x00,0x02,0xB7,0x10,0x00,'<',0xB7,0x10,0x00,0xF4,0xB6,0x10,0x00,'`',0xB7,0x10,0x00,0xE4,0xB6,0x10,0x00,0x14,0xB7,0x10, 19 | 0x00,'&',0xB7,0x10,0x00,'P',0xB7,0x10,0x00,0xA2,0xB7,0x10,0x00,0xB2,0xB7,0x10,0x00,0xC2,0xB7,0x10,0x00,'n',0xB7,0x10,0x00,0xE8,0xB7,0x10,0x00,0xF8,0xB7,0x10,0x00,0x0E,0xB8,0x10,0x00,0x82,0xB7,0x10,0x00,0x94,0xB7,0x10,0x00,'R',0xB8,0x10,0x00,0xD8, 20 | 0xB7,0x10,0x00,'l',0xB8,0x10,0x00,'x',0xB8,0x10,0x00,0x86,0xB8,0x10,0x00,0x9A,0xB8,0x10,0x00,0xB0,0xB8,0x10,0x00,'*',0xB8,0x10,0x00,0xD4,0xB8,0x10,0x00,0xE8,0xB8,0x10,0x00,0xF6,0xB8,0x10,0x00,0x02,0xB9,0x10,0x00,0x0C,0xB9,0x10,0x00,0x1C,0xB9,0x10, 21 | 0x00,'B',0xB8,0x10,0x00,'^',0xB8,0x10,0x00,'B',0xB9,0x10,0x00,0x9C,0xB6,0x10,0x00,0xC2,0xB8,0x10,0x00,'r',0xB9,0x10,0x00,0x84,0xB9,0x10,0x00,0x92,0xB9,0x10,0x00,0xA4,0xB9,0x10,0x00,0xBA,0xB9,0x10,0x00,0xCA,0xB9,0x10,0x00,0xE0,0xB9,0x10,0x00,0xF0, 22 | 0xB9,0x10,0x00,0xFE,0xB9,0x10,0x00,0x0C,0xBA,0x10,0x00,'\"',0xBA,0x10,0x00,'.',0xBA,0x10,0x00,'8',0xBA,0x10,0x00,'D',0xBA,0x10,0x00,'^',0xBA,0x10,0x00,'v',0xBA,0x10,0x00,0x90,0xBA,0x10,0x00,0xAA,0xBA,0x10,0x00,0xC8,0xBA,0x10,0x00,0xD8,0xBA,0x10, 23 | 0x00,0xC6,0xB6,0x10,0x00,0x04,0xBB,0x10,0x00,0x16,0xBB,0x10,0x00,'(',0xBB,0x10,0x00,'8',0xBB,0x10,0x00,'L',0xBB,0x10,0x00,'b',0xBB,0x10,0x00,'t',0xBB,0x10,0x00,0x84,0xBB,0x10,0x00,0x96,0xBB,0x10,0x00,0xA6,0xBB,0x10,0x00,0xB8,0xBB,0x10,0x00,'6', 24 | 0xB9,0x10,0x00,0xBA,0xB6,0x10,0x00,'F',0xB6,0x10,0x00,'*',0xB6,0x10,0x00,0x10,0xB6,0x10,0x00,0x02,0xB6,0x10,0x00,0xF6,0xB5,0x10,0x00,0xAC,0xB6,0x10,0x00,'f',0xB6,0x10,0x00,0x8E,0xB6,0x10,0x00,'~',0xB6,0x10,0x00,'T',0xB9,0x10,0x00,'N',0xB6,0x10, 25 | 0x00,'b',0xB9,0x10,0x00,'*',0xB9,0x10,0x00,0xE8,0xBA,0x10,0x00,'j',0xBE,0x10,0x00,0x92,0xBE,0x10,0x00,'~',0xBE,0x10,0x00,0xE4,0xBE,0x10,0x00,0xD4,0xBE,0x10,0x00,0xC6,0xBE,0x10,0x00,0xBC,0xBE,0x10,0x00,0xB2,0xBE,0x10,0x00,0xA8,0xBE,0x10,0x00,0x9E, 26 | 0xBE,0x10,0x00,'T',0xBE,0x10,0x00,0x00,0x00,0x00,0x00,0x1C,0xBC,0x10,0x00,0x08,0xBC,0x10,0x00,0xF6,0xBB,0x10,0x00,'(',0xBC,0x10,0x00,'4',0xBC,0x10,0x00,'>',0xBC,0x10,0x00,'J',0xBC,0x10,0x00,0x04,0xBF,0x10,0x00,0x14,0xBF,0x10,0x00,'R',0xBC,0x10, 27 | 0x00,'*',0xBF,0x10,0x00,0xD8,0xBB,0x10,0x00,0xE6,0xBB,0x10,0x00,0xF2,0xBE,0x10,0x00,'D',0xBF,0x10,0x00,'4',0xBF,0x10,0x00,'R',0xBF,0x10,0x00,0x00,0x00,0x00,0x00,0x1A,0xBD,0x10,0x00,'`',0xBD,0x10,0x00,'2',0xBD,0x10,0x00,0xEC,0xBD,0x10,0x00,0xDA, 28 | 0xBD,0x10,0x00,0xB0,0xBD,0x10,0x00,'L',0xBD,0x10,0x00,0x9E,0xBD,0x10,0x00,'t',0xBD,0x10,0x00,0x8A,0xBD,0x10,0x00,'\n',0xBD,0x10,0x00,0xC6,0xBD,0x10,0x00,0x9C,0xB5,0x10,0x00,0xB8,0xB5,0x10,0x00,0xAA,0xB5,0x10,0x00,0x00,0x00,0x00,0x00,0xE4,0xBF,0x10, 29 | 0x00,0xD0,0xBF,0x10,}, 30 | //FARPROC m328_DirectDrawEnumerateA, 0x1010B328 31 | (FARPROC)0x10BE32, 32 | //FARPROC m32C_DirectDrawCreate, 0x1010B32C 33 | (FARPROC)0x10BE1E, 34 | //UCHAR m330[0x4], 0x1010B330 35 | {0x00,}, 36 | //FARPROC m334_DirectInputCreateA, 0x1010B334 37 | (FARPROC)0x10B5D4, 38 | //UCHAR m338[0x4], 0x1010B338 39 | {0x00,}, 40 | //FARPROC m33C_DirectSoundCreate, 0x1010B33C 41 | (FARPROC)0x10BDFE, 42 | //UCHAR m340[0x4], 0x1010B340 43 | {0x00,}, 44 | //FARPROC m344_StretchDIBits, 0x1010B344 45 | (FARPROC)0x10BFB0, 46 | //FARPROC m348_GetDeviceCaps, 0x1010B348 47 | (FARPROC)0x10BFC0, 48 | //FARPROC m34C_CreatePalette, 0x1010B34C 49 | (FARPROC)0x10BFA0, 50 | //FARPROC m350_SetBkColor, 0x1010B350 51 | (FARPROC)0x10BCAE, 52 | //FARPROC m354_ExtTextOutA, 0x1010B354 53 | (FARPROC)0x10BC7C, 54 | //FARPROC m358_DeleteObject, 0x1010B358 55 | (FARPROC)0x10BC6C, 56 | //FARPROC m35C_GetTextExtentPoint32A, 0x1010B35C 57 | (FARPROC)0x10BC8A, 58 | //FARPROC m360_GetTextExtentPointA, 0x1010B360 59 | (FARPROC)0x10BCDC, 60 | //FARPROC m364_CreateFontA, 0x1010B364 61 | (FARPROC)0x10BCF2, 62 | //FARPROC m368_SelectObject, 0x1010B368 63 | (FARPROC)0x10BCCC, 64 | //FARPROC m36C_SetTextColor, 0x1010B36C 65 | (FARPROC)0x10BCBC, 66 | //FARPROC m370_GetSystemPaletteEntries, 0x1010B370 67 | (FARPROC)0x10BF64, 68 | //FARPROC m374_RealizePalette, 0x1010B374 69 | (FARPROC)0x10BF7E, 70 | //FARPROC m378_SetBkMode, 0x1010B378 71 | (FARPROC)0x10BCA2, 72 | //FARPROC m37C_SelectPalette, 0x1010B37C 73 | (FARPROC)0x10BF90, 74 | //UCHAR m380[0x4], 0x1010B380 75 | {0x00,}, 76 | //FARPROC m384_HeapFree, 0x1010B384 77 | (FARPROC)0x10B6D8, 78 | //FARPROC m388_UnmapViewOfFile, 0x1010B388 79 | (FARPROC)0x10B702, 80 | //FARPROC m38C_OpenFileMappingA, 0x1010B38C 81 | (FARPROC)0x10B73C, 82 | //FARPROC m390_CloseHandle, 0x1010B390 83 | (FARPROC)0x10B6F4, 84 | //FARPROC m394_OpenProcess, 0x1010B394 85 | (FARPROC)0x10B760, 86 | //FARPROC m398_IsBadCodePtr, 0x1010B398 87 | (FARPROC)0x10B6E4, 88 | //FARPROC m39C_MapViewOfFileEx, 0x1010B39C 89 | (FARPROC)0x10B714, 90 | //FARPROC m3A0_CreateFileMappingA, 0x1010B3A0 91 | (FARPROC)0x10B726, 92 | //FARPROC m3A4_GetSystemInfo, 0x1010B3A4 93 | (FARPROC)0x10B750, 94 | //FARPROC m3A8_MapViewOfFile, 0x1010B3A8 95 | (FARPROC)0x10B7A2, 96 | //FARPROC m3AC_ReleaseMutex, 0x1010B3AC 97 | (FARPROC)0x10B7B2, 98 | //FARPROC m3B0_WaitForSingleObject, 0x1010B3B0 99 | (FARPROC)0x10B7C2, 100 | //FARPROC m3B4_GetCurrentProcess, 0x1010B3B4 101 | (FARPROC)0x10B76E, 102 | //FARPROC m3B8_GetLastError, 0x1010B3B8 103 | (FARPROC)0x10B7E8, 104 | //FARPROC m3BC_GetCurrentThreadId, 0x1010B3BC 105 | (FARPROC)0x10B7F8, 106 | //FARPROC m3C0_InitializeCriticalSection, 0x1010B3C0 107 | (FARPROC)0x10B80E, 108 | //FARPROC m3C4_VirtualQueryEx, 0x1010B3C4 109 | (FARPROC)0x10B782, 110 | //FARPROC m3C8_OpenMutexA, 0x1010B3C8 111 | (FARPROC)0x10B794, 112 | //FARPROC m3CC_SetEvent, 0x1010B3CC 113 | (FARPROC)0x10B852, 114 | //FARPROC m3D0_CreateMutexA, 0x1010B3D0 115 | (FARPROC)0x10B7D8, 116 | //FARPROC m3D4_RtlUnwind, 0x1010B3D4 117 | (FARPROC)0x10B86C, 118 | //FARPROC m3D8_ExitProcess, 0x1010B3D8 119 | (FARPROC)0x10B878, 120 | //FARPROC m3DC_TerminateProcess, 0x1010B3DC 121 | (FARPROC)0x10B886, 122 | //FARPROC m3E0_GetFileAttributesA, 0x1010B3E0 123 | (FARPROC)0x10B89A, 124 | //FARPROC m3E4_GetCommandLineA, 0x1010B3E4 125 | (FARPROC)0x10B8B0, 126 | //FARPROC m3E8_DeleteCriticalSection, 0x1010B3E8 127 | (FARPROC)0x10B82A, 128 | //FARPROC m3EC_GetModuleHandleA, 0x1010B3EC 129 | (FARPROC)0x10B8D4, 130 | //FARPROC m3F0_TlsSetValue, 0x1010B3F0 131 | (FARPROC)0x10B8E8, 132 | //FARPROC m3F4_TlsAlloc, 0x1010B3F4 133 | (FARPROC)0x10B8F6, 134 | //FARPROC m3F8_TlsFree, 0x1010B3F8 135 | (FARPROC)0x10B902, 136 | //FARPROC m3FC_SetLastError, 0x1010B3FC 137 | (FARPROC)0x10B90C, 138 | //FARPROC m400_TlsGetValue, 0x1010B400 139 | (FARPROC)0x10B91C, 140 | //FARPROC m404_CreateEventA, 0x1010B404 141 | (FARPROC)0x10B842, 142 | //FARPROC m408_GetVersion, 0x1010B408 143 | (FARPROC)0x10B85E, 144 | //FARPROC m40C_SetHandleCount, 0x1010B40C 145 | (FARPROC)0x10B942, 146 | //FARPROC m410_VirtualAlloc, 0x1010B410 147 | (FARPROC)0x10B69C, 148 | //FARPROC m414_GetProcAddress, 0x1010B414 149 | (FARPROC)0x10B8C2, 150 | //FARPROC m418_GetStartupInfoA, 0x1010B418 151 | (FARPROC)0x10B972, 152 | //FARPROC m41C_CreateFileA, 0x1010B41C 153 | (FARPROC)0x10B984, 154 | //FARPROC m420_SetFilePointer, 0x1010B420 155 | (FARPROC)0x10B992, 156 | //FARPROC m424_MultiByteToWideChar, 0x1010B424 157 | (FARPROC)0x10B9A4, 158 | //FARPROC m428_LCMapStringA, 0x1010B428 159 | (FARPROC)0x10B9BA, 160 | //FARPROC m42C_WideCharToMultiByte, 0x1010B42C 161 | (FARPROC)0x10B9CA, 162 | //FARPROC m430_LCMapStringW, 0x1010B430 163 | (FARPROC)0x10B9E0, 164 | //FARPROC m434_HeapDestroy, 0x1010B434 165 | (FARPROC)0x10B9F0, 166 | //FARPROC m438_HeapCreate, 0x1010B438 167 | (FARPROC)0x10B9FE, 168 | //FARPROC m43C_GetModuleFileNameA, 0x1010B43C 169 | (FARPROC)0x10BA0C, 170 | //FARPROC m440_GetCPInfo, 0x1010B440 171 | (FARPROC)0x10BA22, 172 | //FARPROC m444_GetACP, 0x1010B444 173 | (FARPROC)0x10BA2E, 174 | //FARPROC m448_GetOEMCP, 0x1010B448 175 | (FARPROC)0x10BA38, 176 | //FARPROC m44C_FreeEnvironmentStringsA, 0x1010B44C 177 | (FARPROC)0x10BA44, 178 | //FARPROC m450_GetEnvironmentStrings, 0x1010B450 179 | (FARPROC)0x10BA5E, 180 | //FARPROC m454_FreeEnvironmentStringsW, 0x1010B454 181 | (FARPROC)0x10BA76, 182 | //FARPROC m458_GetEnvironmentStringsW, 0x1010B458 183 | (FARPROC)0x10BA90, 184 | //FARPROC m45C_SetUnhandledExceptionFilter, 0x1010B45C 185 | (FARPROC)0x10BAAA, 186 | //FARPROC m460_IsBadReadPtr, 0x1010B460 187 | (FARPROC)0x10BAC8, 188 | //FARPROC m464_IsBadWritePtr, 0x1010B464 189 | (FARPROC)0x10BAD8, 190 | //FARPROC m468_GetProcessHeap, 0x1010B468 191 | (FARPROC)0x10B6C6, 192 | //FARPROC m46C_GetStringTypeA, 0x1010B46C 193 | (FARPROC)0x10BB04, 194 | //FARPROC m470_GetStringTypeW, 0x1010B470 195 | (FARPROC)0x10BB16, 196 | //FARPROC m474_SetStdHandle, 0x1010B474 197 | (FARPROC)0x10BB28, 198 | //FARPROC m478_FlushFileBuffers, 0x1010B478 199 | (FARPROC)0x10BB38, 200 | //FARPROC m47C_GetExitCodeProcess, 0x1010B47C 201 | (FARPROC)0x10BB4C, 202 | //FARPROC m480_CreateProcessA, 0x1010B480 203 | (FARPROC)0x10BB62, 204 | //FARPROC m484_LoadLibraryA, 0x1010B484 205 | (FARPROC)0x10BB74, 206 | //FARPROC m488_RaiseException, 0x1010B488 207 | (FARPROC)0x10BB84, 208 | //FARPROC m48C_SetEndOfFile, 0x1010B48C 209 | (FARPROC)0x10BB96, 210 | //FARPROC m490_GetLocaleInfoA, 0x1010B490 211 | (FARPROC)0x10BBA6, 212 | //FARPROC m494_GetLocaleInfoW, 0x1010B494 213 | (FARPROC)0x10BBB8, 214 | //FARPROC m498_ReadFile, 0x1010B498 215 | (FARPROC)0x10B936, 216 | //FARPROC m49C_HeapAlloc, 0x1010B49C 217 | (FARPROC)0x10B6BA, 218 | //FARPROC m4A0_Sleep, 0x1010B4A0 219 | (FARPROC)0x10B646, 220 | //FARPROC m4A4_QueryPerformanceFrequency, 0x1010B4A4 221 | (FARPROC)0x10B62A, 222 | //FARPROC m4A8_QueryPerformanceCounter, 0x1010B4A8 223 | (FARPROC)0x10B610, 224 | //FARPROC m4AC_DeleteFileA, 0x1010B4AC 225 | (FARPROC)0x10B602, 226 | //FARPROC m4B0_MoveFileA, 0x1010B4B0 227 | (FARPROC)0x10B5F6, 228 | //FARPROC m4B4_VirtualFree, 0x1010B4B4 229 | (FARPROC)0x10B6AC, 230 | //FARPROC m4B8_EnterCriticalSection, 0x1010B4B8 231 | (FARPROC)0x10B666, 232 | //FARPROC m4BC_VirtualLock, 0x1010B4BC 233 | (FARPROC)0x10B68E, 234 | //FARPROC m4C0_VirtualQuery, 0x1010B4C0 235 | (FARPROC)0x10B67E, 236 | //FARPROC m4C4_GetFileType, 0x1010B4C4 237 | (FARPROC)0x10B954, 238 | //FARPROC m4C8_LeaveCriticalSection, 0x1010B4C8 239 | (FARPROC)0x10B64E, 240 | //FARPROC m4CC_GetStdHandle, 0x1010B4CC 241 | (FARPROC)0x10B962, 242 | //FARPROC m4D0_WriteFile, 0x1010B4D0 243 | (FARPROC)0x10B92A, 244 | //FARPROC m4D4_UnhandledExceptionFilter, 0x1010B4D4 245 | (FARPROC)0x10BAE8, 246 | //FARPROC m4D8_CreateSemaphoreA, 0x1010B4D8 247 | (FARPROC)0x10BE6A, 248 | //FARPROC m4DC_OpenFile, 0x1010B4DC 249 | (FARPROC)0x10BE92, 250 | //FARPROC m4E0_ReleaseSemaphore, 0x1010B4E0 251 | (FARPROC)0x10BE7E, 252 | //FARPROC m4E4_ExitThread, 0x1010B4E4 253 | (FARPROC)0x10BEE4, 254 | //FARPROC m4E8_CreateThread, 0x1010B4E8 255 | (FARPROC)0x10BED4, 256 | //FARPROC m4EC_GetFileSize, 0x1010B4EC 257 | (FARPROC)0x10BEC6, 258 | //FARPROC m4F0__hwrite, 0x1010B4F0 259 | (FARPROC)0x10BEBC, 260 | //FARPROC m4F4__hread, 0x1010B4F4 261 | (FARPROC)0x10BEB2, 262 | //FARPROC m4F8__llseek, 0x1010B4F8 263 | (FARPROC)0x10BEA8, 264 | //FARPROC m4FC__lclose, 0x1010B4FC 265 | (FARPROC)0x10BE9E, 266 | //FARPROC m500_OutputDebugStringA, 0x1010B500 267 | (FARPROC)0x10BE54, 268 | //UCHAR m504[0x4], 0x1010B504 269 | {0x00,}, 270 | //FARPROC m508_SetTimer, 0x1010B508 271 | (FARPROC)0x10BC1C, 272 | //FARPROC m50C_GetAsyncKeyState, 0x1010B50C 273 | (FARPROC)0x10BC08, 274 | //FARPROC m510_GetWindowLongA, 0x1010B510 275 | (FARPROC)0x10BBF6, 276 | //FARPROC m514_KillTimer, 0x1010B514 277 | (FARPROC)0x10BC28, 278 | //FARPROC m518_SetRect, 0x1010B518 279 | (FARPROC)0x10BC34, 280 | //FARPROC m51C_ReleaseDC, 0x1010B51C 281 | (FARPROC)0x10BC3E, 282 | //FARPROC m520_GetDC, 0x1010B520 283 | (FARPROC)0x10BC4A, 284 | //FARPROC m524_SetWindowPos, 0x1010B524 285 | (FARPROC)0x10BF04, 286 | //FARPROC m528_AdjustWindowRectEx, 0x1010B528 287 | (FARPROC)0x10BF14, 288 | //FARPROC m52C_MessageBeep, 0x1010B52C 289 | (FARPROC)0x10BC52, 290 | //FARPROC m530_GetMenu, 0x1010B530 291 | (FARPROC)0x10BF2A, 292 | //FARPROC m534_MessageBoxA, 0x1010B534 293 | (FARPROC)0x10BBD8, 294 | //FARPROC m538_PostMessageA, 0x1010B538 295 | (FARPROC)0x10BBE6, 296 | //FARPROC m53C_SetWindowLongA, 0x1010B53C 297 | (FARPROC)0x10BEF2, 298 | //FARPROC m540_DrawMenuBar, 0x1010B540 299 | (FARPROC)0x10BF44, 300 | //FARPROC m544_RedrawWindow, 0x1010B544 301 | (FARPROC)0x10BF34, 302 | //FARPROC m548_ClientToScreen, 0x1010B548 303 | (FARPROC)0x10BF52, 304 | //UCHAR m54C[0x4], 0x1010B54C 305 | {0x00,}, 306 | //FARPROC m550_midiOutPrepareHeader, 0x1010B550 307 | (FARPROC)0x10BD1A, 308 | //FARPROC m554_midiStreamRestart, 0x1010B554 309 | (FARPROC)0x10BD60, 310 | //FARPROC m558_midiOutUnprepareHeader, 0x1010B558 311 | (FARPROC)0x10BD32, 312 | //FARPROC m55C_midiStreamStop, 0x1010B55C 313 | (FARPROC)0x10BDEC, 314 | //FARPROC m560_midiStreamClose, 0x1010B560 315 | (FARPROC)0x10BDDA, 316 | //FARPROC m564_midiOutGetDevCapsA, 0x1010B564 317 | (FARPROC)0x10BDB0, 318 | //FARPROC m568_midiOutSetVolume, 0x1010B568 319 | (FARPROC)0x10BD4C, 320 | //FARPROC m56C_midiStreamOpen, 0x1010B56C 321 | (FARPROC)0x10BD9E, 322 | //FARPROC m570_midiStreamProperty, 0x1010B570 323 | (FARPROC)0x10BD74, 324 | //FARPROC m574_midiOutGetVolume, 0x1010B574 325 | (FARPROC)0x10BD8A, 326 | //FARPROC m578_midiStreamOut, 0x1010B578 327 | (FARPROC)0x10BD0A, 328 | //FARPROC m57C_midiOutGetNumDevs, 0x1010B57C 329 | (FARPROC)0x10BDC6, 330 | //FARPROC m580_timeGetTime, 0x1010B580 331 | (FARPROC)0x10B59C, 332 | //FARPROC m584_joyGetDevCapsA, 0x1010B584 333 | (FARPROC)0x10B5B8, 334 | //FARPROC m588_joyGetPosEx, 0x1010B588 335 | (FARPROC)0x10B5AA, 336 | //UCHAR m58C[0x4], 0x1010B58C 337 | {0x00,}, 338 | //FARPROC m590_D3DRMCreateColorRGBA, 0x1010B590 339 | (FARPROC)0x10BFE4, 340 | //FARPROC m594_Direct3DRMCreate, 0x1010B594 341 | (FARPROC)0x10BFD0, 342 | //UCHAR m598[0x6], 0x1010B598 343 | {0x00,0x00,0x00,0x00,0x97,}, 344 | //CHAR m59E_str[12], 0x1010B59E 345 | "timeGetTime", 346 | //UCHAR m5AA[0x2], 0x1010B5AA 347 | {0x1E,}, 348 | //CHAR m5AC_str[12], 0x1010B5AC 349 | "joyGetPosEx", 350 | //UCHAR m5B8[0x2], 0x1010B5B8 351 | {0x1A,}, 352 | //CHAR m5BA_str[15], 0x1010B5BA 353 | "joyGetDevCapsA", 354 | //UCHAR m5C9[0x1], 0x1010B5C9 355 | {0x00,}, 356 | //CHAR m5CA_str[10], 0x1010B5CA 357 | "WINMM.dll", 358 | //UCHAR m5D4[0x2], 0x1010B5D4 359 | {0x00,}, 360 | //CHAR m5D6_str[19], 0x1010B5D6 361 | "DirectInputCreateA", 362 | //UCHAR m5E9[0x1], 0x1010B5E9 363 | {0x00,}, 364 | //CHAR m5EA_str[11], 0x1010B5EA 365 | "DINPUT.dll", 366 | //UCHAR m5F5[0x3], 0x1010B5F5 367 | {0x00,0xA4,0x01,}, 368 | //CHAR m5F8_str[10], 0x1010B5F8 369 | "MoveFileA", 370 | //UCHAR m602[0x2], 0x1010B602 371 | {'M',}, 372 | //CHAR m604_str[12], 0x1010B604 373 | "DeleteFileA", 374 | //UCHAR m610[0x2], 0x1010B610 375 | {0xC3,0x01,}, 376 | //CHAR m612_str[24], 0x1010B612 377 | "QueryPerformanceCounter", 378 | //UCHAR m62A[0x2], 0x1010B62A 379 | {0xC4,0x01,}, 380 | //CHAR m62C_str[26], 0x1010B62C 381 | "QueryPerformanceFrequency", 382 | //UCHAR m646[0x2], 0x1010B646 383 | {':',0x02,}, 384 | //CHAR m648_str[6], 0x1010B648 385 | "Sleep", 386 | //UCHAR m64E[0x2], 0x1010B64E 387 | {0x8D,0x01,}, 388 | //CHAR m650_str[21], 0x1010B650 389 | "LeaveCriticalSection", 390 | //UCHAR m665[0x3], 0x1010B665 391 | {0x00,'W',}, 392 | //CHAR m668_str[21], 0x1010B668 393 | "EnterCriticalSection", 394 | //UCHAR m67D[0x3], 0x1010B67D 395 | {0x00,'^',0x02,}, 396 | //CHAR m680_str[13], 0x1010B680 397 | "VirtualQuery", 398 | //UCHAR m68D[0x3], 0x1010B68D 399 | {0x00,'[',0x02,}, 400 | //CHAR m690_str[12], 0x1010B690 401 | "VirtualLock", 402 | //UCHAR m69C[0x2], 0x1010B69C 403 | {'V',0x02,}, 404 | //CHAR m69E_str[13], 0x1010B69E 405 | "VirtualAlloc", 406 | //UCHAR m6AB[0x3], 0x1010B6AB 407 | {0x00,'Y',0x02,}, 408 | //CHAR m6AE_str[12], 0x1010B6AE 409 | "VirtualFree", 410 | //UCHAR m6BA[0x2], 0x1010B6BA 411 | {'g',0x01,}, 412 | //CHAR m6BC_str[10], 0x1010B6BC 413 | "HeapAlloc", 414 | //UCHAR m6C6[0x2], 0x1010B6C6 415 | {0x17,0x01,}, 416 | //CHAR m6C8_str[15], 0x1010B6C8 417 | "GetProcessHeap", 418 | //UCHAR m6D7[0x3], 0x1010B6D7 419 | {0x00,'m',0x01,}, 420 | //CHAR m6DA_str[9], 0x1010B6DA 421 | "HeapFree", 422 | //UCHAR m6E3[0x3], 0x1010B6E3 423 | {0x00,0x7F,0x01,}, 424 | //CHAR m6E6_str[13], 0x1010B6E6 425 | "IsBadCodePtr", 426 | //UCHAR m6F3[0x3], 0x1010B6F3 427 | {0x00,0x17,}, 428 | //CHAR m6F6_str[12], 0x1010B6F6 429 | "CloseHandle", 430 | //UCHAR m702[0x2], 0x1010B702 431 | {'N',0x02,}, 432 | //CHAR m704_str[16], 0x1010B704 433 | "UnmapViewOfFile", 434 | //UCHAR m714[0x2], 0x1010B714 435 | {0xA3,0x01,}, 436 | //CHAR m716_str[16], 0x1010B716 437 | "MapViewOfFileEx", 438 | //UCHAR m726[0x2], 0x1010B726 439 | {'1',}, 440 | //CHAR m728_str[19], 0x1010B728 441 | "CreateFileMappingA", 442 | //UCHAR m73B[0x3], 0x1010B73B 443 | {0x00,0xAE,0x01,}, 444 | //CHAR m73E_str[17], 0x1010B73E 445 | "OpenFileMappingA", 446 | //UCHAR m74F[0x3], 0x1010B74F 447 | {0x00,'2',0x01,}, 448 | //CHAR m752_str[14], 0x1010B752 449 | "GetSystemInfo", 450 | //UCHAR m760[0x2], 0x1010B760 451 | {0xB2,0x01,}, 452 | //CHAR m762_str[12], 0x1010B762 453 | "OpenProcess", 454 | //UCHAR m76E[0x2], 0x1010B76E 455 | {0xD2,}, 456 | //CHAR m770_str[18], 0x1010B770 457 | "GetCurrentProcess", 458 | //UCHAR m782[0x2], 0x1010B782 459 | {'_',0x02,}, 460 | //CHAR m784_str[15], 0x1010B784 461 | "VirtualQueryEx", 462 | //UCHAR m793[0x3], 0x1010B793 463 | {0x00,0xB0,0x01,}, 464 | //CHAR m796_str[11], 0x1010B796 465 | "OpenMutexA", 466 | //UCHAR m7A1[0x3], 0x1010B7A1 467 | {0x00,0xA2,0x01,}, 468 | //CHAR m7A4_str[14], 0x1010B7A4 469 | "MapViewOfFile", 470 | //UCHAR m7B2[0x2], 0x1010B7B2 471 | {0xD9,0x01,}, 472 | //CHAR m7B4_str[13], 0x1010B7B4 473 | "ReleaseMutex", 474 | //UCHAR m7C1[0x3], 0x1010B7C1 475 | {0x00,'e',0x02,}, 476 | //CHAR m7C4_str[20], 0x1010B7C4 477 | "WaitForSingleObject", 478 | //UCHAR m7D8[0x2], 0x1010B7D8 479 | {'7',}, 480 | //CHAR m7DA_str[13], 0x1010B7DA 481 | "CreateMutexA", 482 | //UCHAR m7E7[0x3], 0x1010B7E7 483 | {0x00,0xF3,}, 484 | //CHAR m7EA_str[13], 0x1010B7EA 485 | "GetLastError", 486 | //UCHAR m7F7[0x3], 0x1010B7F7 487 | {0x00,0xD5,}, 488 | //CHAR m7FA_str[19], 0x1010B7FA 489 | "GetCurrentThreadId", 490 | //UCHAR m80D[0x3], 0x1010B80D 491 | {0x00,'x',0x01,}, 492 | //CHAR m810_str[26], 0x1010B810 493 | "InitializeCriticalSection", 494 | //UCHAR m82A[0x2], 0x1010B82A 495 | {'K',}, 496 | //CHAR m82C_str[22], 0x1010B82C 497 | "DeleteCriticalSection", 498 | //UCHAR m842[0x2], 0x1010B842 499 | {'-',}, 500 | //CHAR m844_str[13], 0x1010B844 501 | "CreateEventA", 502 | //UCHAR m851[0x3], 0x1010B851 503 | {0x00,0x0F,0x02,}, 504 | //CHAR m854_str[9], 0x1010B854 505 | "SetEvent", 506 | //UCHAR m85D[0x3], 0x1010B85D 507 | {0x00,'K',0x01,}, 508 | //CHAR m860_str[11], 0x1010B860 509 | "GetVersion", 510 | //UCHAR m86B[0x3], 0x1010B86B 511 | {0x00,0xE1,0x01,}, 512 | //CHAR m86E_str[10], 0x1010B86E 513 | "RtlUnwind", 514 | //UCHAR m878[0x2], 0x1010B878 515 | {'j',}, 516 | //CHAR m87A_str[12], 0x1010B87A 517 | "ExitProcess", 518 | //UCHAR m886[0x2], 0x1010B886 519 | {'A',0x02,}, 520 | //CHAR m888_str[17], 0x1010B888 521 | "TerminateProcess", 522 | //UCHAR m899[0x3], 0x1010B899 523 | {0x00,0xE7,}, 524 | //CHAR m89C_str[19], 0x1010B89C 525 | "GetFileAttributesA", 526 | //UCHAR m8AF[0x3], 0x1010B8AF 527 | {0x00,0xA9,}, 528 | //CHAR m8B2_str[16], 0x1010B8B2 529 | "GetCommandLineA", 530 | //UCHAR m8C2[0x2], 0x1010B8C2 531 | {0x15,0x01,}, 532 | //CHAR m8C4_str[15], 0x1010B8C4 533 | "GetProcAddress", 534 | //UCHAR m8D3[0x3], 0x1010B8D3 535 | {0x00,0xFD,}, 536 | //CHAR m8D6_str[17], 0x1010B8D6 537 | "GetModuleHandleA", 538 | //UCHAR m8E7[0x3], 0x1010B8E7 539 | {0x00,'F',0x02,}, 540 | //CHAR m8EA_str[12], 0x1010B8EA 541 | "TlsSetValue", 542 | //UCHAR m8F6[0x2], 0x1010B8F6 543 | {'C',0x02,}, 544 | //CHAR m8F8_str[9], 0x1010B8F8 545 | "TlsAlloc", 546 | //UCHAR m901[0x3], 0x1010B901 547 | {0x00,'D',0x02,}, 548 | //CHAR m904_str[8], 0x1010B904 549 | "TlsFree", 550 | //UCHAR m90C[0x2], 0x1010B90C 551 | {0x19,0x02,}, 552 | //CHAR m90E_str[13], 0x1010B90E 553 | "SetLastError", 554 | //UCHAR m91B[0x3], 0x1010B91B 555 | {0x00,'E',0x02,}, 556 | //CHAR m91E_str[12], 0x1010B91E 557 | "TlsGetValue", 558 | //UCHAR m92A[0x2], 0x1010B92A 559 | {'v',0x02,}, 560 | //CHAR m92C_str[10], 0x1010B92C 561 | "WriteFile", 562 | //UCHAR m936[0x2], 0x1010B936 563 | {0xD2,0x01,}, 564 | //CHAR m938_str[9], 0x1010B938 565 | "ReadFile", 566 | //UCHAR m941[0x3], 0x1010B941 567 | {0x00,0x16,0x02,}, 568 | //CHAR m944_str[15], 0x1010B944 569 | "SetHandleCount", 570 | //UCHAR m953[0x3], 0x1010B953 571 | {0x00,0xEE,}, 572 | //CHAR m956_str[12], 0x1010B956 573 | "GetFileType", 574 | //UCHAR m962[0x2], 0x1010B962 575 | {')',0x01,}, 576 | //CHAR m964_str[13], 0x1010B964 577 | "GetStdHandle", 578 | //UCHAR m971[0x3], 0x1010B971 579 | {0x00,'\'',0x01,}, 580 | //CHAR m974_str[16], 0x1010B974 581 | "GetStartupInfoA", 582 | //UCHAR m984[0x2], 0x1010B984 583 | {'0',}, 584 | //CHAR m986_str[12], 0x1010B986 585 | "CreateFileA", 586 | //UCHAR m992[0x2], 0x1010B992 587 | {0x14,0x02,}, 588 | //CHAR m994_str[15], 0x1010B994 589 | "SetFilePointer", 590 | //UCHAR m9A3[0x3], 0x1010B9A3 591 | {0x00,0xA9,0x01,}, 592 | //CHAR m9A6_str[20], 0x1010B9A6 593 | "MultiByteToWideChar", 594 | //UCHAR m9BA[0x2], 0x1010B9BA 595 | {0x8B,0x01,}, 596 | //CHAR m9BC_str[13], 0x1010B9BC 597 | "LCMapStringA", 598 | //UCHAR m9C9[0x3], 0x1010B9C9 599 | {0x00,'i',0x02,}, 600 | //CHAR m9CC_str[20], 0x1010B9CC 601 | "WideCharToMultiByte", 602 | //UCHAR m9E0[0x2], 0x1010B9E0 603 | {0x8C,0x01,}, 604 | //CHAR m9E2_str[13], 0x1010B9E2 605 | "LCMapStringW", 606 | //UCHAR m9EF[0x3], 0x1010B9EF 607 | {0x00,'k',0x01,}, 608 | //CHAR m9F2_str[12], 0x1010B9F2 609 | "HeapDestroy", 610 | //UCHAR m9FE[0x2], 0x1010B9FE 611 | {'i',0x01,}, 612 | //CHAR mA00_str[11], 0x1010BA00 613 | "HeapCreate", 614 | //UCHAR mA0B[0x3], 0x1010BA0B 615 | {0x00,0xFB,}, 616 | //CHAR mA0E_str[19], 0x1010BA0E 617 | "GetModuleFileNameA", 618 | //UCHAR mA21[0x3], 0x1010BA21 619 | {0x00,0xA2,}, 620 | //CHAR mA24_str[10], 0x1010BA24 621 | "GetCPInfo", 622 | //UCHAR mA2E[0x2], 0x1010BA2E 623 | {0x9C,}, 624 | //CHAR mA30_str[7], 0x1010BA30 625 | "GetACP", 626 | //UCHAR mA37[0x3], 0x1010BA37 627 | {0x00,0x08,0x01,}, 628 | //CHAR mA3A_str[9], 0x1010BA3A 629 | "GetOEMCP", 630 | //UCHAR mA43[0x3], 0x1010BA43 631 | {0x00,0x95,}, 632 | //CHAR mA46_str[24], 0x1010BA46 633 | "FreeEnvironmentStringsA", 634 | //UCHAR mA5E[0x2], 0x1010BA5E 635 | {0xE0,}, 636 | //CHAR mA60_str[22], 0x1010BA60 637 | "GetEnvironmentStrings", 638 | //UCHAR mA76[0x2], 0x1010BA76 639 | {0x96,}, 640 | //CHAR mA78_str[24], 0x1010BA78 641 | "FreeEnvironmentStringsW", 642 | //UCHAR mA90[0x2], 0x1010BA90 643 | {0xE2,}, 644 | //CHAR mA92_str[23], 0x1010BA92 645 | "GetEnvironmentStringsW", 646 | //UCHAR mAA9[0x3], 0x1010BAA9 647 | {0x00,'1',0x02,}, 648 | //CHAR mAAC_str[28], 0x1010BAAC 649 | "SetUnhandledExceptionFilter", 650 | //UCHAR mAC8[0x2], 0x1010BAC8 651 | {0x82,0x01,}, 652 | //CHAR mACA_str[13], 0x1010BACA 653 | "IsBadReadPtr", 654 | //UCHAR mAD7[0x3], 0x1010BAD7 655 | {0x00,0x85,0x01,}, 656 | //CHAR mADA_str[14], 0x1010BADA 657 | "IsBadWritePtr", 658 | //UCHAR mAE8[0x2], 0x1010BAE8 659 | {'K',0x02,}, 660 | //CHAR mAEA_str[25], 0x1010BAEA 661 | "UnhandledExceptionFilter", 662 | //UCHAR mB03[0x3], 0x1010BB03 663 | {0x00,'*',0x01,}, 664 | //CHAR mB06_str[15], 0x1010BB06 665 | "GetStringTypeA", 666 | //UCHAR mB15[0x3], 0x1010BB15 667 | {0x00,'-',0x01,}, 668 | //CHAR mB18_str[15], 0x1010BB18 669 | "GetStringTypeW", 670 | //UCHAR mB27[0x3], 0x1010BB27 671 | {0x00,'$',0x02,}, 672 | //CHAR mB2A_str[13], 0x1010BB2A 673 | "SetStdHandle", 674 | //UCHAR mB37[0x3], 0x1010BB37 675 | {0x00,0x8D,}, 676 | //CHAR mB3A_str[17], 0x1010BB3A 677 | "FlushFileBuffers", 678 | //UCHAR mB4B[0x3], 0x1010BB4B 679 | {0x00,0xE5,}, 680 | //CHAR mB4E_str[19], 0x1010BB4E 681 | "GetExitCodeProcess", 682 | //UCHAR mB61[0x3], 0x1010BB61 683 | {0x00,'<',}, 684 | //CHAR mB64_str[15], 0x1010BB64 685 | "CreateProcessA", 686 | //UCHAR mB73[0x3], 0x1010BB73 687 | {0x00,0x8E,0x01,}, 688 | //CHAR mB76_str[13], 0x1010BB76 689 | "LoadLibraryA", 690 | //UCHAR mB83[0x3], 0x1010BB83 691 | {0x00,0xC7,0x01,}, 692 | //CHAR mB86_str[15], 0x1010BB86 693 | "RaiseException", 694 | //UCHAR mB95[0x3], 0x1010BB95 695 | {0x00,0x0B,0x02,}, 696 | //CHAR mB98_str[13], 0x1010BB98 697 | "SetEndOfFile", 698 | //UCHAR mBA5[0x3], 0x1010BBA5 699 | {0x00,0xF5,}, 700 | //CHAR mBA8_str[15], 0x1010BBA8 701 | "GetLocaleInfoA", 702 | //UCHAR mBB7[0x3], 0x1010BBB7 703 | {0x00,0xF6,}, 704 | //CHAR mBBA_str[15], 0x1010BBBA 705 | "GetLocaleInfoW", 706 | //UCHAR mBC9[0x1], 0x1010BBC9 707 | {0x00,}, 708 | //CHAR mBCA_str[13], 0x1010BBCA 709 | "KERNEL32.dll", 710 | //UCHAR mBD7[0x3], 0x1010BBD7 711 | {0x00,0x95,0x01,}, 712 | //CHAR mBDA_str[12], 0x1010BBDA 713 | "MessageBoxA", 714 | //UCHAR mBE6[0x2], 0x1010BBE6 715 | {0xB1,0x01,}, 716 | //CHAR mBE8_str[13], 0x1010BBE8 717 | "PostMessageA", 718 | //UCHAR mBF5[0x3], 0x1010BBF5 719 | {0x00,':',0x01,}, 720 | //CHAR mBF8_str[15], 0x1010BBF8 721 | "GetWindowLongA", 722 | //UCHAR mC07[0x3], 0x1010BC07 723 | {0x00,0xD7,}, 724 | //CHAR mC0A_str[17], 0x1010BC0A 725 | "GetAsyncKeyState", 726 | //UCHAR mC1B[0x3], 0x1010BC1B 727 | {0x00,0x15,0x02,}, 728 | //CHAR mC1E_str[9], 0x1010BC1E 729 | "SetTimer", 730 | //UCHAR mC27[0x3], 0x1010BC27 731 | {0x00,'m',0x01,}, 732 | //CHAR mC2A_str[10], 0x1010BC2A 733 | "KillTimer", 734 | //UCHAR mC34[0x2], 0x1010BC34 735 | {0x07,0x02,}, 736 | //CHAR mC36_str[8], 0x1010BC36 737 | "SetRect", 738 | //UCHAR mC3E[0x2], 0x1010BC3E 739 | {0xCC,0x01,}, 740 | //CHAR mC40_str[10], 0x1010BC40 741 | "ReleaseDC", 742 | //UCHAR mC4A[0x2], 0x1010BC4A 743 | {0xEE,}, 744 | //CHAR mC4C_str[6], 0x1010BC4C 745 | "GetDC", 746 | //UCHAR mC52[0x2], 0x1010BC52 747 | {0x94,0x01,}, 748 | //CHAR mC54_str[12], 0x1010BC54 749 | "MessageBeep", 750 | //CHAR mC60_str[11], 0x1010BC60 751 | "USER32.dll", 752 | //UCHAR mC6B[0x3], 0x1010BC6B 753 | {0x00,'F',}, 754 | //CHAR mC6E_str[13], 0x1010BC6E 755 | "DeleteObject", 756 | //UCHAR mC7B[0x3], 0x1010BC7B 757 | {0x00,'b',}, 758 | //CHAR mC7E_str[12], 0x1010BC7E 759 | "ExtTextOutA", 760 | //UCHAR mC8A[0x2], 0x1010BC8A 761 | {0x06,0x01,}, 762 | //CHAR mC8C_str[22], 0x1010BC8C 763 | "GetTextExtentPoint32A", 764 | //UCHAR mCA2[0x2], 0x1010BCA2 765 | {'R',0x01,}, 766 | //CHAR mCA4_str[10], 0x1010BCA4 767 | "SetBkMode", 768 | //UCHAR mCAE[0x2], 0x1010BCAE 769 | {'Q',0x01,}, 770 | //CHAR mCB0_str[11], 0x1010BCB0 771 | "SetBkColor", 772 | //UCHAR mCBB[0x3], 0x1010BCBB 773 | {0x00,'s',0x01,}, 774 | //CHAR mCBE_str[13], 0x1010BCBE 775 | "SetTextColor", 776 | //UCHAR mCCB[0x3], 0x1010BCCB 777 | {0x00,'K',0x01,}, 778 | //CHAR mCCE_str[13], 0x1010BCCE 779 | "SelectObject", 780 | //UCHAR mCDB[0x3], 0x1010BCDB 781 | {0x00,0x08,0x01,}, 782 | //CHAR mCDE_str[20], 0x1010BCDE 783 | "GetTextExtentPointA", 784 | //UCHAR mCF2[0x2], 0x1010BCF2 785 | {'+',}, 786 | //CHAR mCF4_str[12], 0x1010BCF4 787 | "CreateFontA", 788 | //CHAR mD00_str[10], 0x1010BD00 789 | "GDI32.dll", 790 | //UCHAR mD0A[0x2], 0x1010BD0A 791 | {'^',}, 792 | //CHAR mD0C_str[14], 0x1010BD0C 793 | "midiStreamOut", 794 | //UCHAR mD1A[0x2], 0x1010BD1A 795 | {'W',}, 796 | //CHAR mD1C_str[21], 0x1010BD1C 797 | "midiOutPrepareHeader", 798 | //UCHAR mD31[0x3], 0x1010BD31 799 | {0x00,'[',}, 800 | //CHAR mD34_str[23], 0x1010BD34 801 | "midiOutUnprepareHeader", 802 | //UCHAR mD4B[0x3], 0x1010BD4B 803 | {0x00,'Y',}, 804 | //CHAR mD4E_str[17], 0x1010BD4E 805 | "midiOutSetVolume", 806 | //UCHAR mD5F[0x3], 0x1010BD5F 807 | {0x00,'b',}, 808 | //CHAR mD62_str[18], 0x1010BD62 809 | "midiStreamRestart", 810 | //UCHAR mD74[0x2], 0x1010BD74 811 | {'a',}, 812 | //CHAR mD76_str[19], 0x1010BD76 813 | "midiStreamProperty", 814 | //UCHAR mD89[0x3], 0x1010BD89 815 | {0x00,'S',}, 816 | //CHAR mD8C_str[17], 0x1010BD8C 817 | "midiOutGetVolume", 818 | //UCHAR mD9D[0x3], 0x1010BD9D 819 | {0x00,']',}, 820 | //CHAR mDA0_str[15], 0x1010BDA0 821 | "midiStreamOpen", 822 | //UCHAR mDAF[0x3], 0x1010BDAF 823 | {0x00,'M',}, 824 | //CHAR mDB2_str[19], 0x1010BDB2 825 | "midiOutGetDevCapsA", 826 | //UCHAR mDC5[0x3], 0x1010BDC5 827 | {0x00,'R',}, 828 | //CHAR mDC8_str[18], 0x1010BDC8 829 | "midiOutGetNumDevs", 830 | //UCHAR mDDA[0x2], 0x1010BDDA 831 | {'\\',}, 832 | //CHAR mDDC_str[16], 0x1010BDDC 833 | "midiStreamClose", 834 | //UCHAR mDEC[0x2], 0x1010BDEC 835 | {'c',}, 836 | //CHAR mDEE_str[15], 0x1010BDEE 837 | "midiStreamStop", 838 | //UCHAR mDFD[0x3], 0x1010BDFD 839 | {0x00,0x03,}, 840 | //CHAR mE00_str[18], 0x1010BE00 841 | "DirectSoundCreate", 842 | //CHAR mE12_str[11], 0x1010BE12 843 | "DSOUND.dll", 844 | //UCHAR mE1D[0x3], 0x1010BE1D 845 | {0x00,0x05,}, 846 | //CHAR mE20_str[17], 0x1010BE20 847 | "DirectDrawCreate", 848 | //UCHAR mE31[0x3], 0x1010BE31 849 | {0x00,0x07,}, 850 | //CHAR mE34_str[21], 0x1010BE34 851 | "DirectDrawEnumerateA", 852 | //UCHAR mE49[0x1], 0x1010BE49 853 | {0x00,}, 854 | //CHAR mE4A_str[10], 0x1010BE4A 855 | "DDRAW.dll", 856 | //UCHAR mE54[0x2], 0x1010BE54 857 | {0xB8,0x01,}, 858 | //CHAR mE56_str[19], 0x1010BE56 859 | "OutputDebugStringA", 860 | //UCHAR mE69[0x3], 0x1010BE69 861 | {0x00,'?',}, 862 | //CHAR mE6C_str[17], 0x1010BE6C 863 | "CreateSemaphoreA", 864 | //UCHAR mE7D[0x3], 0x1010BE7D 865 | {0x00,0xDA,0x01,}, 866 | //CHAR mE80_str[17], 0x1010BE80 867 | "ReleaseSemaphore", 868 | //UCHAR mE91[0x3], 0x1010BE91 869 | {0x00,0xAD,0x01,}, 870 | //CHAR mE94_str[9], 0x1010BE94 871 | "OpenFile", 872 | //UCHAR mE9D[0x3], 0x1010BE9D 873 | {0x00,0x86,0x02,}, 874 | //CHAR mEA0_str[8], 0x1010BEA0 875 | "_lclose", 876 | //UCHAR mEA8[0x2], 0x1010BEA8 877 | {0x88,0x02,}, 878 | //CHAR mEAA_str[8], 0x1010BEAA 879 | "_llseek", 880 | //UCHAR mEB2[0x2], 0x1010BEB2 881 | {0x84,0x02,}, 882 | //CHAR mEB4_str[7], 0x1010BEB4 883 | "_hread", 884 | //UCHAR mEBB[0x3], 0x1010BEBB 885 | {0x00,0x85,0x02,}, 886 | //CHAR mEBE_str[8], 0x1010BEBE 887 | "_hwrite", 888 | //UCHAR mEC6[0x2], 0x1010BEC6 889 | {0xEC,}, 890 | //CHAR mEC8_str[12], 0x1010BEC8 891 | "GetFileSize", 892 | //UCHAR mED4[0x2], 0x1010BED4 893 | {'B',}, 894 | //CHAR mED6_str[13], 0x1010BED6 895 | "CreateThread", 896 | //UCHAR mEE3[0x3], 0x1010BEE3 897 | {0x00,'k',}, 898 | //CHAR mEE6_str[11], 0x1010BEE6 899 | "ExitThread", 900 | //UCHAR mEF1[0x3], 0x1010BEF1 901 | {0x00,0x1A,0x02,}, 902 | //CHAR mEF4_str[15], 0x1010BEF4 903 | "SetWindowLongA", 904 | //UCHAR mF03[0x3], 0x1010BF03 905 | {0x00,0x1D,0x02,}, 906 | //CHAR mF06_str[13], 0x1010BF06 907 | "SetWindowPos", 908 | //UCHAR mF13[0x3], 0x1010BF13 909 | {0x00,0x02,}, 910 | //CHAR mF16_str[19], 0x1010BF16 911 | "AdjustWindowRectEx", 912 | //UCHAR mF29[0x3], 0x1010BF29 913 | {0x00,'\t',0x01,}, 914 | //CHAR mF2C_str[8], 0x1010BF2C 915 | "GetMenu", 916 | //UCHAR mF34[0x2], 0x1010BF34 917 | {0xBC,0x01,}, 918 | //CHAR mF36_str[13], 0x1010BF36 919 | "RedrawWindow", 920 | //UCHAR mF43[0x3], 0x1010BF43 921 | {0x00,0xA6,}, 922 | //CHAR mF46_str[12], 0x1010BF46 923 | "DrawMenuBar", 924 | //UCHAR mF52[0x2], 0x1010BF52 925 | {'6',}, 926 | //CHAR mF54_str[15], 0x1010BF54 927 | "ClientToScreen", 928 | //UCHAR mF63[0x3], 0x1010BF63 929 | {0x00,0xFD,}, 930 | //CHAR mF66_str[24], 0x1010BF66 931 | "GetSystemPaletteEntries", 932 | //UCHAR mF7E[0x2], 0x1010BF7E 933 | {'8',0x01,}, 934 | //CHAR mF80_str[15], 0x1010BF80 935 | "RealizePalette", 936 | //UCHAR mF8F[0x3], 0x1010BF8F 937 | {0x00,'L',0x01,}, 938 | //CHAR mF92_str[14], 0x1010BF92 939 | "SelectPalette", 940 | //UCHAR mFA0[0x2], 0x1010BFA0 941 | {'5',}, 942 | //CHAR mFA2_str[14], 0x1010BFA2 943 | "CreatePalette", 944 | //UCHAR mFB0[0x2], 0x1010BFB0 945 | {0x80,0x01,}, 946 | //CHAR mFB2_str[14], 0x1010BFB2 947 | "StretchDIBits", 948 | //UCHAR mFC0[0x2], 0x1010BFC0 949 | {0xC8,}, 950 | //CHAR mFC2_str[14], 0x1010BFC2 951 | "GetDeviceCaps", 952 | //UCHAR mFD0[0x2], 0x1010BFD0 953 | {0x14,}, 954 | //CHAR mFD2_str[17], 0x1010BFD2 955 | "Direct3DRMCreate", 956 | //UCHAR mFE3[0x3], 0x1010BFE3 957 | {0x00,0x05,}, 958 | //CHAR mFE6_str[21], 0x1010BFE6 959 | "D3DRMCreateColorRGBA", 960 | //UCHAR mFFB[0x1], 0x1010BFFB 961 | {0x00,}, 962 | //CHAR mFFC_str[10], 0x1010BFFC 963 | "d3drm.dll", 964 | //UCHAR m1006[0xFFA], 0x1010C006 965 | {0x00,}, 966 | }; 967 | #pragma pack(pop) -------------------------------------------------------------------------------- /Source/LEGO1_idata.h: -------------------------------------------------------------------------------- 1 | #if !defined(D2SL_LEGO1_IDATA_SUPP_H_00121000_INCLUDED_) 2 | #define D2SL_LEGO1_IDATA_SUPP_H_00121000_INCLUDED_ 3 | 4 | #ifdef __cplusplus 5 | extern "C" { 6 | #endif 7 | #pragma pack(push) 8 | #pragma pack(1) 9 | 10 | struct _st_LEGO1_idata { 11 | UCHAR m0[0x328]; 12 | FARPROC m328_DirectDrawEnumerateA; 13 | FARPROC m32C_DirectDrawCreate; 14 | UCHAR m330[0x4]; 15 | FARPROC m334_DirectInputCreateA; 16 | UCHAR m338[0x4]; 17 | FARPROC m33C_DirectSoundCreate; 18 | UCHAR m340[0x4]; 19 | FARPROC m344_StretchDIBits; 20 | FARPROC m348_GetDeviceCaps; 21 | FARPROC m34C_CreatePalette; 22 | FARPROC m350_SetBkColor; 23 | FARPROC m354_ExtTextOutA; 24 | FARPROC m358_DeleteObject; 25 | FARPROC m35C_GetTextExtentPoint32A; 26 | FARPROC m360_GetTextExtentPointA; 27 | FARPROC m364_CreateFontA; 28 | FARPROC m368_SelectObject; 29 | FARPROC m36C_SetTextColor; 30 | FARPROC m370_GetSystemPaletteEntries; 31 | FARPROC m374_RealizePalette; 32 | FARPROC m378_SetBkMode; 33 | FARPROC m37C_SelectPalette; 34 | UCHAR m380[0x4]; 35 | FARPROC m384_HeapFree; 36 | FARPROC m388_UnmapViewOfFile; 37 | FARPROC m38C_OpenFileMappingA; 38 | FARPROC m390_CloseHandle; 39 | FARPROC m394_OpenProcess; 40 | FARPROC m398_IsBadCodePtr; 41 | FARPROC m39C_MapViewOfFileEx; 42 | FARPROC m3A0_CreateFileMappingA; 43 | FARPROC m3A4_GetSystemInfo; 44 | FARPROC m3A8_MapViewOfFile; 45 | FARPROC m3AC_ReleaseMutex; 46 | FARPROC m3B0_WaitForSingleObject; 47 | FARPROC m3B4_GetCurrentProcess; 48 | FARPROC m3B8_GetLastError; 49 | FARPROC m3BC_GetCurrentThreadId; 50 | FARPROC m3C0_InitializeCriticalSection; 51 | FARPROC m3C4_VirtualQueryEx; 52 | FARPROC m3C8_OpenMutexA; 53 | FARPROC m3CC_SetEvent; 54 | FARPROC m3D0_CreateMutexA; 55 | FARPROC m3D4_RtlUnwind; 56 | FARPROC m3D8_ExitProcess; 57 | FARPROC m3DC_TerminateProcess; 58 | FARPROC m3E0_GetFileAttributesA; 59 | FARPROC m3E4_GetCommandLineA; 60 | FARPROC m3E8_DeleteCriticalSection; 61 | FARPROC m3EC_GetModuleHandleA; 62 | FARPROC m3F0_TlsSetValue; 63 | FARPROC m3F4_TlsAlloc; 64 | FARPROC m3F8_TlsFree; 65 | FARPROC m3FC_SetLastError; 66 | FARPROC m400_TlsGetValue; 67 | FARPROC m404_CreateEventA; 68 | FARPROC m408_GetVersion; 69 | FARPROC m40C_SetHandleCount; 70 | FARPROC m410_VirtualAlloc; 71 | FARPROC m414_GetProcAddress; 72 | FARPROC m418_GetStartupInfoA; 73 | FARPROC m41C_CreateFileA; 74 | FARPROC m420_SetFilePointer; 75 | FARPROC m424_MultiByteToWideChar; 76 | FARPROC m428_LCMapStringA; 77 | FARPROC m42C_WideCharToMultiByte; 78 | FARPROC m430_LCMapStringW; 79 | FARPROC m434_HeapDestroy; 80 | FARPROC m438_HeapCreate; 81 | FARPROC m43C_GetModuleFileNameA; 82 | FARPROC m440_GetCPInfo; 83 | FARPROC m444_GetACP; 84 | FARPROC m448_GetOEMCP; 85 | FARPROC m44C_FreeEnvironmentStringsA; 86 | FARPROC m450_GetEnvironmentStrings; 87 | FARPROC m454_FreeEnvironmentStringsW; 88 | FARPROC m458_GetEnvironmentStringsW; 89 | FARPROC m45C_SetUnhandledExceptionFilter; 90 | FARPROC m460_IsBadReadPtr; 91 | FARPROC m464_IsBadWritePtr; 92 | FARPROC m468_GetProcessHeap; 93 | FARPROC m46C_GetStringTypeA; 94 | FARPROC m470_GetStringTypeW; 95 | FARPROC m474_SetStdHandle; 96 | FARPROC m478_FlushFileBuffers; 97 | FARPROC m47C_GetExitCodeProcess; 98 | FARPROC m480_CreateProcessA; 99 | FARPROC m484_LoadLibraryA; 100 | FARPROC m488_RaiseException; 101 | FARPROC m48C_SetEndOfFile; 102 | FARPROC m490_GetLocaleInfoA; 103 | FARPROC m494_GetLocaleInfoW; 104 | FARPROC m498_ReadFile; 105 | FARPROC m49C_HeapAlloc; 106 | FARPROC m4A0_Sleep; 107 | FARPROC m4A4_QueryPerformanceFrequency; 108 | FARPROC m4A8_QueryPerformanceCounter; 109 | FARPROC m4AC_DeleteFileA; 110 | FARPROC m4B0_MoveFileA; 111 | FARPROC m4B4_VirtualFree; 112 | FARPROC m4B8_EnterCriticalSection; 113 | FARPROC m4BC_VirtualLock; 114 | FARPROC m4C0_VirtualQuery; 115 | FARPROC m4C4_GetFileType; 116 | FARPROC m4C8_LeaveCriticalSection; 117 | FARPROC m4CC_GetStdHandle; 118 | FARPROC m4D0_WriteFile; 119 | FARPROC m4D4_UnhandledExceptionFilter; 120 | FARPROC m4D8_CreateSemaphoreA; 121 | FARPROC m4DC_OpenFile; 122 | FARPROC m4E0_ReleaseSemaphore; 123 | FARPROC m4E4_ExitThread; 124 | FARPROC m4E8_CreateThread; 125 | FARPROC m4EC_GetFileSize; 126 | FARPROC m4F0__hwrite; 127 | FARPROC m4F4__hread; 128 | FARPROC m4F8__llseek; 129 | FARPROC m4FC__lclose; 130 | FARPROC m500_OutputDebugStringA; 131 | UCHAR m504[0x4]; 132 | FARPROC m508_SetTimer; 133 | FARPROC m50C_GetAsyncKeyState; 134 | FARPROC m510_GetWindowLongA; 135 | FARPROC m514_KillTimer; 136 | FARPROC m518_SetRect; 137 | FARPROC m51C_ReleaseDC; 138 | FARPROC m520_GetDC; 139 | FARPROC m524_SetWindowPos; 140 | FARPROC m528_AdjustWindowRectEx; 141 | FARPROC m52C_MessageBeep; 142 | FARPROC m530_GetMenu; 143 | FARPROC m534_MessageBoxA; 144 | FARPROC m538_PostMessageA; 145 | FARPROC m53C_SetWindowLongA; 146 | FARPROC m540_DrawMenuBar; 147 | FARPROC m544_RedrawWindow; 148 | FARPROC m548_ClientToScreen; 149 | UCHAR m54C[0x4]; 150 | FARPROC m550_midiOutPrepareHeader; 151 | FARPROC m554_midiStreamRestart; 152 | FARPROC m558_midiOutUnprepareHeader; 153 | FARPROC m55C_midiStreamStop; 154 | FARPROC m560_midiStreamClose; 155 | FARPROC m564_midiOutGetDevCapsA; 156 | FARPROC m568_midiOutSetVolume; 157 | FARPROC m56C_midiStreamOpen; 158 | FARPROC m570_midiStreamProperty; 159 | FARPROC m574_midiOutGetVolume; 160 | FARPROC m578_midiStreamOut; 161 | FARPROC m57C_midiOutGetNumDevs; 162 | FARPROC m580_timeGetTime; 163 | FARPROC m584_joyGetDevCapsA; 164 | FARPROC m588_joyGetPosEx; 165 | UCHAR m58C[0x4]; 166 | FARPROC m590_D3DRMCreateColorRGBA; 167 | FARPROC m594_Direct3DRMCreate; 168 | UCHAR m598[0x6]; 169 | CHAR m59E_str[12]; 170 | UCHAR m5AA[0x2]; 171 | CHAR m5AC_str[12]; 172 | UCHAR m5B8[0x2]; 173 | CHAR m5BA_str[15]; 174 | UCHAR m5C9[0x1]; 175 | CHAR m5CA_str[10]; 176 | UCHAR m5D4[0x2]; 177 | CHAR m5D6_str[19]; 178 | UCHAR m5E9[0x1]; 179 | CHAR m5EA_str[11]; 180 | UCHAR m5F5[0x3]; 181 | CHAR m5F8_str[10]; 182 | UCHAR m602[0x2]; 183 | CHAR m604_str[12]; 184 | UCHAR m610[0x2]; 185 | CHAR m612_str[24]; 186 | UCHAR m62A[0x2]; 187 | CHAR m62C_str[26]; 188 | UCHAR m646[0x2]; 189 | CHAR m648_str[6]; 190 | UCHAR m64E[0x2]; 191 | CHAR m650_str[21]; 192 | UCHAR m665[0x3]; 193 | CHAR m668_str[21]; 194 | UCHAR m67D[0x3]; 195 | CHAR m680_str[13]; 196 | UCHAR m68D[0x3]; 197 | CHAR m690_str[12]; 198 | UCHAR m69C[0x2]; 199 | CHAR m69E_str[13]; 200 | UCHAR m6AB[0x3]; 201 | CHAR m6AE_str[12]; 202 | UCHAR m6BA[0x2]; 203 | CHAR m6BC_str[10]; 204 | UCHAR m6C6[0x2]; 205 | CHAR m6C8_str[15]; 206 | UCHAR m6D7[0x3]; 207 | CHAR m6DA_str[9]; 208 | UCHAR m6E3[0x3]; 209 | CHAR m6E6_str[13]; 210 | UCHAR m6F3[0x3]; 211 | CHAR m6F6_str[12]; 212 | UCHAR m702[0x2]; 213 | CHAR m704_str[16]; 214 | UCHAR m714[0x2]; 215 | CHAR m716_str[16]; 216 | UCHAR m726[0x2]; 217 | CHAR m728_str[19]; 218 | UCHAR m73B[0x3]; 219 | CHAR m73E_str[17]; 220 | UCHAR m74F[0x3]; 221 | CHAR m752_str[14]; 222 | UCHAR m760[0x2]; 223 | CHAR m762_str[12]; 224 | UCHAR m76E[0x2]; 225 | CHAR m770_str[18]; 226 | UCHAR m782[0x2]; 227 | CHAR m784_str[15]; 228 | UCHAR m793[0x3]; 229 | CHAR m796_str[11]; 230 | UCHAR m7A1[0x3]; 231 | CHAR m7A4_str[14]; 232 | UCHAR m7B2[0x2]; 233 | CHAR m7B4_str[13]; 234 | UCHAR m7C1[0x3]; 235 | CHAR m7C4_str[20]; 236 | UCHAR m7D8[0x2]; 237 | CHAR m7DA_str[13]; 238 | UCHAR m7E7[0x3]; 239 | CHAR m7EA_str[13]; 240 | UCHAR m7F7[0x3]; 241 | CHAR m7FA_str[19]; 242 | UCHAR m80D[0x3]; 243 | CHAR m810_str[26]; 244 | UCHAR m82A[0x2]; 245 | CHAR m82C_str[22]; 246 | UCHAR m842[0x2]; 247 | CHAR m844_str[13]; 248 | UCHAR m851[0x3]; 249 | CHAR m854_str[9]; 250 | UCHAR m85D[0x3]; 251 | CHAR m860_str[11]; 252 | UCHAR m86B[0x3]; 253 | CHAR m86E_str[10]; 254 | UCHAR m878[0x2]; 255 | CHAR m87A_str[12]; 256 | UCHAR m886[0x2]; 257 | CHAR m888_str[17]; 258 | UCHAR m899[0x3]; 259 | CHAR m89C_str[19]; 260 | UCHAR m8AF[0x3]; 261 | CHAR m8B2_str[16]; 262 | UCHAR m8C2[0x2]; 263 | CHAR m8C4_str[15]; 264 | UCHAR m8D3[0x3]; 265 | CHAR m8D6_str[17]; 266 | UCHAR m8E7[0x3]; 267 | CHAR m8EA_str[12]; 268 | UCHAR m8F6[0x2]; 269 | CHAR m8F8_str[9]; 270 | UCHAR m901[0x3]; 271 | CHAR m904_str[8]; 272 | UCHAR m90C[0x2]; 273 | CHAR m90E_str[13]; 274 | UCHAR m91B[0x3]; 275 | CHAR m91E_str[12]; 276 | UCHAR m92A[0x2]; 277 | CHAR m92C_str[10]; 278 | UCHAR m936[0x2]; 279 | CHAR m938_str[9]; 280 | UCHAR m941[0x3]; 281 | CHAR m944_str[15]; 282 | UCHAR m953[0x3]; 283 | CHAR m956_str[12]; 284 | UCHAR m962[0x2]; 285 | CHAR m964_str[13]; 286 | UCHAR m971[0x3]; 287 | CHAR m974_str[16]; 288 | UCHAR m984[0x2]; 289 | CHAR m986_str[12]; 290 | UCHAR m992[0x2]; 291 | CHAR m994_str[15]; 292 | UCHAR m9A3[0x3]; 293 | CHAR m9A6_str[20]; 294 | UCHAR m9BA[0x2]; 295 | CHAR m9BC_str[13]; 296 | UCHAR m9C9[0x3]; 297 | CHAR m9CC_str[20]; 298 | UCHAR m9E0[0x2]; 299 | CHAR m9E2_str[13]; 300 | UCHAR m9EF[0x3]; 301 | CHAR m9F2_str[12]; 302 | UCHAR m9FE[0x2]; 303 | CHAR mA00_str[11]; 304 | UCHAR mA0B[0x3]; 305 | CHAR mA0E_str[19]; 306 | UCHAR mA21[0x3]; 307 | CHAR mA24_str[10]; 308 | UCHAR mA2E[0x2]; 309 | CHAR mA30_str[7]; 310 | UCHAR mA37[0x3]; 311 | CHAR mA3A_str[9]; 312 | UCHAR mA43[0x3]; 313 | CHAR mA46_str[24]; 314 | UCHAR mA5E[0x2]; 315 | CHAR mA60_str[22]; 316 | UCHAR mA76[0x2]; 317 | CHAR mA78_str[24]; 318 | UCHAR mA90[0x2]; 319 | CHAR mA92_str[23]; 320 | UCHAR mAA9[0x3]; 321 | CHAR mAAC_str[28]; 322 | UCHAR mAC8[0x2]; 323 | CHAR mACA_str[13]; 324 | UCHAR mAD7[0x3]; 325 | CHAR mADA_str[14]; 326 | UCHAR mAE8[0x2]; 327 | CHAR mAEA_str[25]; 328 | UCHAR mB03[0x3]; 329 | CHAR mB06_str[15]; 330 | UCHAR mB15[0x3]; 331 | CHAR mB18_str[15]; 332 | UCHAR mB27[0x3]; 333 | CHAR mB2A_str[13]; 334 | UCHAR mB37[0x3]; 335 | CHAR mB3A_str[17]; 336 | UCHAR mB4B[0x3]; 337 | CHAR mB4E_str[19]; 338 | UCHAR mB61[0x3]; 339 | CHAR mB64_str[15]; 340 | UCHAR mB73[0x3]; 341 | CHAR mB76_str[13]; 342 | UCHAR mB83[0x3]; 343 | CHAR mB86_str[15]; 344 | UCHAR mB95[0x3]; 345 | CHAR mB98_str[13]; 346 | UCHAR mBA5[0x3]; 347 | CHAR mBA8_str[15]; 348 | UCHAR mBB7[0x3]; 349 | CHAR mBBA_str[15]; 350 | UCHAR mBC9[0x1]; 351 | CHAR mBCA_str[13]; 352 | UCHAR mBD7[0x3]; 353 | CHAR mBDA_str[12]; 354 | UCHAR mBE6[0x2]; 355 | CHAR mBE8_str[13]; 356 | UCHAR mBF5[0x3]; 357 | CHAR mBF8_str[15]; 358 | UCHAR mC07[0x3]; 359 | CHAR mC0A_str[17]; 360 | UCHAR mC1B[0x3]; 361 | CHAR mC1E_str[9]; 362 | UCHAR mC27[0x3]; 363 | CHAR mC2A_str[10]; 364 | UCHAR mC34[0x2]; 365 | CHAR mC36_str[8]; 366 | UCHAR mC3E[0x2]; 367 | CHAR mC40_str[10]; 368 | UCHAR mC4A[0x2]; 369 | CHAR mC4C_str[6]; 370 | UCHAR mC52[0x2]; 371 | CHAR mC54_str[12]; 372 | CHAR mC60_str[11]; 373 | UCHAR mC6B[0x3]; 374 | CHAR mC6E_str[13]; 375 | UCHAR mC7B[0x3]; 376 | CHAR mC7E_str[12]; 377 | UCHAR mC8A[0x2]; 378 | CHAR mC8C_str[22]; 379 | UCHAR mCA2[0x2]; 380 | CHAR mCA4_str[10]; 381 | UCHAR mCAE[0x2]; 382 | CHAR mCB0_str[11]; 383 | UCHAR mCBB[0x3]; 384 | CHAR mCBE_str[13]; 385 | UCHAR mCCB[0x3]; 386 | CHAR mCCE_str[13]; 387 | UCHAR mCDB[0x3]; 388 | CHAR mCDE_str[20]; 389 | UCHAR mCF2[0x2]; 390 | CHAR mCF4_str[12]; 391 | CHAR mD00_str[10]; 392 | UCHAR mD0A[0x2]; 393 | CHAR mD0C_str[14]; 394 | UCHAR mD1A[0x2]; 395 | CHAR mD1C_str[21]; 396 | UCHAR mD31[0x3]; 397 | CHAR mD34_str[23]; 398 | UCHAR mD4B[0x3]; 399 | CHAR mD4E_str[17]; 400 | UCHAR mD5F[0x3]; 401 | CHAR mD62_str[18]; 402 | UCHAR mD74[0x2]; 403 | CHAR mD76_str[19]; 404 | UCHAR mD89[0x3]; 405 | CHAR mD8C_str[17]; 406 | UCHAR mD9D[0x3]; 407 | CHAR mDA0_str[15]; 408 | UCHAR mDAF[0x3]; 409 | CHAR mDB2_str[19]; 410 | UCHAR mDC5[0x3]; 411 | CHAR mDC8_str[18]; 412 | UCHAR mDDA[0x2]; 413 | CHAR mDDC_str[16]; 414 | UCHAR mDEC[0x2]; 415 | CHAR mDEE_str[15]; 416 | UCHAR mDFD[0x3]; 417 | CHAR mE00_str[18]; 418 | CHAR mE12_str[11]; 419 | UCHAR mE1D[0x3]; 420 | CHAR mE20_str[17]; 421 | UCHAR mE31[0x3]; 422 | CHAR mE34_str[21]; 423 | UCHAR mE49[0x1]; 424 | CHAR mE4A_str[10]; 425 | UCHAR mE54[0x2]; 426 | CHAR mE56_str[19]; 427 | UCHAR mE69[0x3]; 428 | CHAR mE6C_str[17]; 429 | UCHAR mE7D[0x3]; 430 | CHAR mE80_str[17]; 431 | UCHAR mE91[0x3]; 432 | CHAR mE94_str[9]; 433 | UCHAR mE9D[0x3]; 434 | CHAR mEA0_str[8]; 435 | UCHAR mEA8[0x2]; 436 | CHAR mEAA_str[8]; 437 | UCHAR mEB2[0x2]; 438 | CHAR mEB4_str[7]; 439 | UCHAR mEBB[0x3]; 440 | CHAR mEBE_str[8]; 441 | UCHAR mEC6[0x2]; 442 | CHAR mEC8_str[12]; 443 | UCHAR mED4[0x2]; 444 | CHAR mED6_str[13]; 445 | UCHAR mEE3[0x3]; 446 | CHAR mEE6_str[11]; 447 | UCHAR mEF1[0x3]; 448 | CHAR mEF4_str[15]; 449 | UCHAR mF03[0x3]; 450 | CHAR mF06_str[13]; 451 | UCHAR mF13[0x3]; 452 | CHAR mF16_str[19]; 453 | UCHAR mF29[0x3]; 454 | CHAR mF2C_str[8]; 455 | UCHAR mF34[0x2]; 456 | CHAR mF36_str[13]; 457 | UCHAR mF43[0x3]; 458 | CHAR mF46_str[12]; 459 | UCHAR mF52[0x2]; 460 | CHAR mF54_str[15]; 461 | UCHAR mF63[0x3]; 462 | CHAR mF66_str[24]; 463 | UCHAR mF7E[0x2]; 464 | CHAR mF80_str[15]; 465 | UCHAR mF8F[0x3]; 466 | CHAR mF92_str[14]; 467 | UCHAR mFA0[0x2]; 468 | CHAR mFA2_str[14]; 469 | UCHAR mFB0[0x2]; 470 | CHAR mFB2_str[14]; 471 | UCHAR mFC0[0x2]; 472 | CHAR mFC2_str[14]; 473 | UCHAR mFD0[0x2]; 474 | CHAR mFD2_str[17]; 475 | UCHAR mFE3[0x3]; 476 | CHAR mFE6_str[21]; 477 | UCHAR mFFB[0x1]; 478 | CHAR mFFC_str[10]; 479 | UCHAR m1006[0xFFA]; 480 | }; 481 | 482 | __declspec(align(16)) extern _st_LEGO1_idata LEGO1_idata; 483 | 484 | #pragma pack(pop) 485 | 486 | #ifdef __cplusplus 487 | } 488 | #endif 489 | 490 | #endif 491 | -------------------------------------------------------------------------------- /Source/dllmain.cpp: -------------------------------------------------------------------------------- 1 | // dllmain.cpp : Defines the entry point for the DLL application. 2 | #include "stdafx.h" 3 | 4 | #if 0 5 | BOOL APIENTRY DllMain( HMODULE hModule, 6 | DWORD ul_reason_for_call, 7 | LPVOID lpReserved 8 | ) 9 | { 10 | switch (ul_reason_for_call) 11 | { 12 | case DLL_PROCESS_ATTACH: 13 | case DLL_THREAD_ATTACH: 14 | case DLL_THREAD_DETACH: 15 | case DLL_PROCESS_DETACH: 16 | break; 17 | } 18 | return TRUE; 19 | } 20 | #endif 21 | -------------------------------------------------------------------------------- /Source/stdafx.cpp: -------------------------------------------------------------------------------- 1 | // stdafx.cpp : source file that includes just the standard includes 2 | // ExePrj.pch will be the pre-compiled header 3 | // stdafx.obj will contain the pre-compiled type information 4 | 5 | #include "stdafx.h" 6 | 7 | // TODO: reference any additional headers you need in STDAFX.H 8 | // and not in this file 9 | -------------------------------------------------------------------------------- /Source/stdafx.h: -------------------------------------------------------------------------------- 1 | // stdafx.h : include file for standard system include files, 2 | // or project specific include files that are used frequently, but 3 | // are changed infrequently 4 | // 5 | 6 | #pragma once 7 | 8 | #include "targetver.h" 9 | 10 | #include 11 | #include 12 | 13 | 14 | #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit 15 | 16 | #include 17 | #include 18 | 19 | // TODO: reference additional headers your program requires here 20 | #include "..\Tools\LongJump.h" 21 | #include "..\Tools\DDTools.h" 22 | #include "..\Tools\DebugTools.h" -------------------------------------------------------------------------------- /Source/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // The following macros define the minimum required platform. The minimum required platform 4 | // is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run 5 | // your application. The macros work by enabling all features available on platform versions up to and 6 | // including the version specified. 7 | 8 | // Modify the following defines if you have to target a platform prior to the ones specified below. 9 | // Refer to MSDN for the latest info on corresponding values for different platforms. 10 | #ifndef WINVER // Specifies that the minimum required platform is Windows Vista. 11 | #define WINVER 0x0600 // Change this to the appropriate value to target other versions of Windows. 12 | #endif 13 | 14 | #ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows Vista. 15 | #define _WIN32_WINNT 0x0600 // Change this to the appropriate value to target other versions of Windows. 16 | #endif 17 | 18 | #ifndef _WIN32_WINDOWS // Specifies that the minimum required platform is Windows 98. 19 | #define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later. 20 | #endif 21 | 22 | #ifndef _WIN32_IE // Specifies that the minimum required platform is Internet Explorer 7.0. 23 | #define _WIN32_IE 0x0700 // Change this to the appropriate value to target other versions of IE. 24 | #endif 25 | -------------------------------------------------------------------------------- /Tools/DDTools.cpp: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | File Name : DLL Decompile Tools 3 | Author : Zhixian Lin 4 | Date : 2017 5 | Description : The tools for decompile work. 6 | Copyright : www.dll-decompiler.com, all rights reserved. 7 | E-mail : support@dll-decompiler.com 8 | *******************************************************************************/ 9 | 10 | #include "StdAfx.h" 11 | #include "DDTools.h" 12 | 13 | TlsIndex::~TlsIndex() 14 | { 15 | if(m_tlsIndex != (DWORD)-1) 16 | TlsFree(m_tlsIndex); 17 | } 18 | 19 | typedef void (__stdcall *FPassReg)(DWORD regVal); 20 | 21 | __declspec(naked) static void __stdcall PassEax(DWORD regVal) 22 | { 23 | __asm{ 24 | 25 | } 26 | } 27 | 28 | __declspec(naked) static void __stdcall PassReg(Register reg, DWORD regVal) 29 | { 30 | __asm{ 31 | add dword ptr [esp + 4], offset _NoPass //reg 32 | jmp dword ptr [esp + 4] 33 | 34 | _NoPass: 35 | retn 8 36 | nop 37 | nop 38 | nop 39 | nop 40 | //_PassEax: 41 | mov eax,dword ptr [esp + 8] 42 | retn 8 43 | //_PassEbx: 44 | mov ebx,dword ptr [esp + 8] 45 | retn 8 46 | //_PassEcx: 47 | mov ecx,dword ptr [esp + 8] 48 | retn 8 49 | //_PassEdx: 50 | mov edx,dword ptr [esp + 8] 51 | retn 8 52 | //_PassEsi: 53 | mov esi,dword ptr [esp + 8] 54 | retn 8 55 | //_PassEdi: 56 | mov edi,dword ptr [esp + 8] 57 | retn 8 58 | //_PassEbp: 59 | mov ebp,dword ptr [esp + 8] 60 | retn 8 61 | } 62 | } 63 | 64 | #define PASS_REGS \ 65 | __asm push dword ptr [esp + 0xC] __asm push dword ptr [esp + 0xC] __asm call PassReg \ 66 | __asm push dword ptr [esp + 0x14] __asm push dword ptr [esp + 0x14] __asm call PassReg \ 67 | __asm push dword ptr [esp + 0x1C] __asm push dword ptr [esp + 0x1C] __asm call PassReg \ 68 | __asm push dword ptr [esp + 0x24] __asm push dword ptr [esp + 0x24] __asm call PassReg \ 69 | __asm push dword ptr [esp + 0x2C] __asm push dword ptr [esp + 0x2C] __asm call PassReg \ 70 | __asm push dword ptr [esp + 0x34] __asm push dword ptr [esp + 0x34] __asm call PassReg \ 71 | __asm push dword ptr [esp + 0x3C] __asm push dword ptr [esp + 0x3C] __asm call PassReg 72 | 73 | __declspec(naked) DWORD InvokeFunEx(LPCVOID fun, RegValues regValues) 74 | { 75 | __asm{ 76 | PASS_REGS 77 | call dword ptr [esp + 4] 78 | ret 79 | } 80 | } 81 | 82 | __declspec(naked) DWORD InvokeFunEx(LPCVOID fun, RegValues regValues, DWORD arg1) 83 | { 84 | __asm{ 85 | PASS_REGS 86 | push dword ptr [esp + 0x40] //arg1 87 | call dword ptr [esp + 8] 88 | ret 89 | } 90 | } 91 | 92 | __declspec(naked) DWORD InvokeFunEx(LPCVOID fun, RegValues regValues, DWORD arg1,DWORD arg2) 93 | { 94 | __asm{ 95 | PASS_REGS 96 | push dword ptr [esp + 0x44] //arg2 97 | push dword ptr [esp + 0x44] //arg1 98 | call dword ptr [esp + 0xC] 99 | ret 100 | } 101 | } 102 | 103 | __declspec(naked) DWORD InvokeFunEx(LPCVOID fun, RegValues regValues, DWORD arg1,DWORD arg2,DWORD arg3) 104 | { 105 | __asm{ 106 | PASS_REGS 107 | push dword ptr [esp + 0x48] //arg3 108 | push dword ptr [esp + 0x48] //arg2 109 | push dword ptr [esp + 0x48] //arg1 110 | call dword ptr [esp + 0x10] 111 | ret 112 | } 113 | } 114 | 115 | __declspec(naked) DWORD InvokeFunEx(LPCVOID fun, RegValues regValues, DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4) 116 | { 117 | __asm{ 118 | PASS_REGS 119 | push dword ptr [esp + 0x4C] //arg4 120 | push dword ptr [esp + 0x4C] //arg3 121 | push dword ptr [esp + 0x4C] //arg2 122 | push dword ptr [esp + 0x4C] //arg1 123 | call dword ptr [esp + 0x14] 124 | ret 125 | } 126 | } 127 | 128 | __declspec(naked) DWORD InvokeFunExC(LPCVOID fun, RegValues regValues) 129 | { 130 | __asm{ 131 | PASS_REGS 132 | call dword ptr [esp + 4] 133 | ret 134 | } 135 | } 136 | 137 | __declspec(naked) DWORD InvokeFunExC(LPCVOID fun, RegValues regValues, DWORD arg1) 138 | { 139 | __asm{ 140 | PASS_REGS 141 | push dword ptr [esp + 0x40] //arg1 142 | call dword ptr [esp + 8] 143 | add esp,4 144 | ret 145 | } 146 | } 147 | 148 | __declspec(naked) DWORD InvokeFunExC(LPCVOID fun, RegValues regValues, DWORD arg1,DWORD arg2) 149 | { 150 | __asm{ 151 | PASS_REGS 152 | push dword ptr [esp + 0x44] //arg2 153 | push dword ptr [esp + 0x44] //arg1 154 | call dword ptr [esp + 0xC] 155 | add esp,8 156 | ret 157 | } 158 | } 159 | 160 | __declspec(naked) DWORD InvokeFunExC(LPCVOID fun, RegValues regValues, DWORD arg1,DWORD arg2,DWORD arg3) 161 | { 162 | __asm{ 163 | PASS_REGS 164 | push dword ptr [esp + 0x48] //arg3 165 | push dword ptr [esp + 0x48] //arg2 166 | push dword ptr [esp + 0x48] //arg1 167 | call dword ptr [esp + 0x10] 168 | add esp,0xC 169 | ret 170 | } 171 | } 172 | 173 | __declspec(naked) DWORD InvokeFunExC(LPCVOID fun, RegValues regValues, DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4) 174 | { 175 | __asm{ 176 | PASS_REGS 177 | push dword ptr [esp + 0x4C] //arg4 178 | push dword ptr [esp + 0x4C] //arg3 179 | push dword ptr [esp + 0x4C] //arg2 180 | push dword ptr [esp + 0x4C] //arg1 181 | call dword ptr [esp + 0x14] 182 | add esp,0x10 183 | ret 184 | } 185 | } 186 | 187 | __declspec(naked) void __stdcall imul8(CHAR val, DWORD* vEaxEdx) 188 | { 189 | __asm{ 190 | mov ecx,dword ptr [esp + 8] //vEaxEdx 191 | mov al,byte ptr [ecx] 192 | mov dl,byte ptr [esp + 4] //val 193 | imul dl 194 | mov word ptr [ecx],ax 195 | retn 8 196 | } 197 | } 198 | 199 | __declspec(naked) void __stdcall imul32(INT val, DWORD* vEaxEdx) 200 | { 201 | __asm{ 202 | mov ecx,dword ptr [esp + 8] //vEaxEdx 203 | mov eax,dword ptr [ecx] 204 | mov edx,dword ptr [esp + 4] //val 205 | imul edx 206 | mov dword ptr [ecx],eax 207 | mov dword ptr [ecx + 4],edx 208 | retn 8 209 | } 210 | } 211 | 212 | __declspec(naked) void __stdcall idiv8(CHAR val, DWORD* vEaxEdx) 213 | { 214 | __asm{ 215 | mov ecx,dword ptr [esp + 8] //vEaxEdx 216 | mov ax,word ptr [ecx] 217 | idiv byte ptr [esp + 4] //val 218 | mov byte ptr [ecx],al 219 | mov byte ptr [ecx + 1],ah 220 | retn 8 221 | } 222 | } 223 | 224 | __declspec(naked) void __stdcall idiv32(INT val, DWORD* vEaxEdx) 225 | { 226 | __asm{ 227 | mov ecx,dword ptr [esp + 8] //vEaxEdx 228 | mov eax,dword ptr [ecx] 229 | mov edx,dword ptr [ecx + 4] 230 | idiv dword ptr [esp + 4] //val 231 | mov dword ptr [ecx],eax 232 | mov dword ptr [ecx + 4],edx 233 | retn 8 234 | } 235 | } 236 | 237 | DWORD MagicDiv7(INT val, INT nShift) 238 | { 239 | DWORD _vEaxEdxBuf[2]; 240 | DWORD& vEax = _vEaxEdxBuf[0]; 241 | DWORD& vEdx = _vEaxEdxBuf[1]; 242 | 243 | vEax = 0x92492493; 244 | imul32(val,&vEax); 245 | vEdx += val; 246 | *(INT*)&vEdx >>= nShift; 247 | 248 | return vEdx; 249 | } 250 | 251 | DWORD MagicDiv100(INT val, INT nShift) 252 | { 253 | DWORD _vEaxEdxBuf[2]; 254 | DWORD& vEax = _vEaxEdxBuf[0]; 255 | DWORD& vEdx = _vEaxEdxBuf[1]; 256 | 257 | vEax = 0x51EB851F; 258 | imul32(val,&vEax); 259 | *(INT*)&vEdx >>= nShift; 260 | 261 | return vEdx; 262 | } -------------------------------------------------------------------------------- /Tools/DDTools.h: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | File Name : DLL Decompile Tools 3 | Author : Zhixian Lin 4 | Date : 2017 5 | Description : The tools for decompile work. 6 | Copyright : www.dll-decompiler.com, all rights reserved. 7 | E-mail : support@dll-decompiler.com 8 | *******************************************************************************/ 9 | 10 | #pragma once 11 | 12 | #ifndef ASSERT 13 | #ifdef _DEBUG 14 | #define ASSERT(expr) if(!(expr)){__asm int 3} 15 | #else 16 | #define ASSERT(expr) 17 | #endif 18 | #endif 19 | 20 | #if _MSC_VER==1600 21 | #define MSVCR_DLL "MSVCR100.DLL" 22 | #endif 23 | 24 | #if _MSC_VER==1500 25 | #define MSVCR_DLL "MSVCR90.DLL" 26 | #endif 27 | 28 | #if _MSC_VER==1400 29 | #define MSVCR_DLL "MSVCR80.DLL" 30 | #endif 31 | 32 | #if _MSC_VER==1310 33 | #define MSVCR_DLL "MSVCR71.DLL" 34 | #endif 35 | 36 | #if _MSC_VER==1300 37 | #define MSVCR_DLL "MSVCR70.DLL" 38 | #endif 39 | 40 | #if _MSC_VER==1200 41 | #define MSVCR_DLL "MSVCR60.DLL" 42 | #endif 43 | 44 | #if _MSC_VER==1100 45 | #define MSVCR_DLL "MSVCR50.DLL" 46 | #endif 47 | 48 | #define JMP_TABLE_BEGIN(tableName,indexReg) __asm jmp dword ptr [offset tableName + indexReg*8 + 1] __asm tableName: 49 | #define JT_ITEM(destAddr) __asm push destAddr DB(0xCC) DB(0xCC) DB(0xCC) //Jmp table item 50 | #define JMP_TABLE_END() 51 | 52 | class TlsIndex 53 | { 54 | private: 55 | DWORD m_tlsIndex; 56 | public: 57 | TlsIndex() 58 | { 59 | m_tlsIndex = TlsAlloc(); 60 | } 61 | 62 | ~TlsIndex(); 63 | 64 | operator DWORD()const{return m_tlsIndex;} 65 | }; 66 | 67 | DWORD _InvokeFun(LPCVOID fun, INT nArg, ...); 68 | 69 | typedef DWORD (__stdcall *FStd0Args)(); 70 | typedef DWORD (__stdcall *FStd1Args)(DWORD arg1); 71 | typedef DWORD (__stdcall *FStd2Args)(DWORD arg1,DWORD arg2); 72 | typedef DWORD (__stdcall *FStd3Args)(DWORD arg1,DWORD arg2,DWORD arg3); 73 | typedef DWORD (__stdcall *FStd4Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4); 74 | typedef DWORD (__stdcall *FStd5Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5); 75 | typedef DWORD (__stdcall *FStd6Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6); 76 | typedef DWORD (__stdcall *FStd7Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7); 77 | typedef DWORD (__stdcall *FStd8Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8); 78 | typedef DWORD (__stdcall *FStd9Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8, 79 | DWORD arg9); 80 | typedef DWORD (__stdcall *FStd10Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8, 81 | DWORD arg9,DWORD arg10); 82 | typedef DWORD (__stdcall *FStd11Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8, 83 | DWORD arg9,DWORD arg10,DWORD arg11); 84 | typedef DWORD (__stdcall *FStd12Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8, 85 | DWORD arg9,DWORD arg10,DWORD arg11,DWORD arg12); 86 | typedef DWORD (__stdcall *FStd13Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8, 87 | DWORD arg9,DWORD arg10,DWORD arg11,DWORD arg12,DWORD arg13); 88 | typedef DWORD (__stdcall *FStd14Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8, 89 | DWORD arg9,DWORD arg10,DWORD arg11,DWORD arg12,DWORD arg13,DWORD arg14); 90 | typedef DWORD (__stdcall *FStd15Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8, 91 | DWORD arg9,DWORD arg10,DWORD arg11,DWORD arg12,DWORD arg13,DWORD arg14,DWORD arg15); 92 | typedef DWORD (__stdcall *FStd16Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8, 93 | DWORD arg9,DWORD arg10,DWORD arg11,DWORD arg12,DWORD arg13,DWORD arg14,DWORD arg15, 94 | DWORD arg16); 95 | 96 | inline DWORD _Invoke(LPCVOID fun) 97 | { 98 | return ((FStd0Args)fun)(); 99 | } 100 | 101 | template DWORD _Invoke(LPCVOID fun,T1 arg1) 102 | { 103 | return ((FStd1Args)fun)((DWORD)arg1); 104 | } 105 | 106 | template DWORD _Invoke(LPCVOID fun,T1 arg1,T2 arg2) 107 | { 108 | return ((FStd2Args)fun)((DWORD)arg1,(DWORD)arg2); 109 | } 110 | 111 | template DWORD _Invoke(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3) 112 | { 113 | return ((FStd3Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3); 114 | } 115 | 116 | template DWORD _Invoke(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4) 117 | { 118 | return ((FStd4Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4); 119 | } 120 | 121 | template 122 | DWORD _Invoke(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5) 123 | { 124 | return ((FStd5Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5); 125 | } 126 | 127 | template 128 | DWORD _Invoke(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6) 129 | { 130 | return ((FStd6Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6); 131 | } 132 | 133 | template 134 | DWORD _Invoke(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7) 135 | { 136 | return ((FStd7Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7); 137 | } 138 | 139 | template 140 | DWORD _Invoke(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8) 141 | { 142 | return ((FStd8Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8); 143 | } 144 | 145 | template 146 | DWORD _Invoke(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9) 147 | { 148 | return ((FStd9Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8, 149 | (DWORD)arg9); 150 | } 151 | 152 | template 153 | DWORD _Invoke(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9,T10 arg10) 154 | { 155 | return ((FStd10Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8, 156 | (DWORD)arg9,(DWORD)arg10); 157 | } 158 | 159 | template 161 | DWORD _Invoke(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9,T10 arg10, 162 | T11 arg11) 163 | { 164 | return ((FStd11Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8, 165 | (DWORD)arg9,(DWORD)arg10,(DWORD)arg11); 166 | } 167 | 168 | template 170 | DWORD _Invoke(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9,T10 arg10, 171 | T11 arg11,T12 arg12) 172 | { 173 | return ((FStd12Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8, 174 | (DWORD)arg9,(DWORD)arg10,(DWORD)arg11,(DWORD)arg12); 175 | } 176 | 177 | template 179 | DWORD _Invoke(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9,T10 arg10, 180 | T11 arg11,T12 arg12,T13 arg13) 181 | { 182 | return ((FStd13Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8, 183 | (DWORD)arg9,(DWORD)arg10,(DWORD)arg11,(DWORD)arg12,(DWORD)arg13); 184 | } 185 | 186 | template 188 | DWORD _Invoke(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9,T10 arg10, 189 | T11 arg11,T12 arg12,T13 arg13,T14 arg14) 190 | { 191 | return ((FStd14Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8, 192 | (DWORD)arg9,(DWORD)arg10,(DWORD)arg11,(DWORD)arg12,(DWORD)arg13,(DWORD)arg14); 193 | } 194 | 195 | template 197 | DWORD _Invoke(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9,T10 arg10, 198 | T11 arg11,T12 arg12,T13 arg13,T14 arg14,T15 arg15) 199 | { 200 | return ((FStd15Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8, 201 | (DWORD)arg9,(DWORD)arg10,(DWORD)arg11,(DWORD)arg12,(DWORD)arg13,(DWORD)arg14,(DWORD)arg15); 202 | } 203 | 204 | template 206 | DWORD _Invoke(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9,T10 arg10, 207 | T11 arg11,T12 arg12,T13 arg13,T14 arg14,T15 arg15,T16 arg16) 208 | { 209 | return ((FStd16Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8, 210 | (DWORD)arg9,(DWORD)arg10,(DWORD)arg11,(DWORD)arg12,(DWORD)arg13,(DWORD)arg14,(DWORD)arg15,(DWORD)arg16); 211 | } 212 | 213 | #define INVOKE(fun, ...) _Invoke(fun,__VA_ARGS__) 214 | 215 | typedef DWORD (*FCdecl0Args)(); 216 | typedef DWORD (*FCdecl1Args)(DWORD arg1); 217 | typedef DWORD (*FCdecl2Args)(DWORD arg1,DWORD arg2); 218 | typedef DWORD (*FCdecl3Args)(DWORD arg1,DWORD arg2,DWORD arg3); 219 | typedef DWORD (*FCdecl4Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4); 220 | typedef DWORD (*FCdecl5Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5); 221 | typedef DWORD (*FCdecl6Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6); 222 | typedef DWORD (*FCdecl7Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7); 223 | typedef DWORD (*FCdecl8Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8); 224 | typedef DWORD (*FCdecl9Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8, 225 | DWORD arg9); 226 | typedef DWORD (*FCdecl10Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8, 227 | DWORD arg9,DWORD arg10); 228 | typedef DWORD (*FCdecl11Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8, 229 | DWORD arg9,DWORD arg10,DWORD arg11); 230 | typedef DWORD (*FCdecl12Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8, 231 | DWORD arg9,DWORD arg10,DWORD arg11,DWORD arg12); 232 | typedef DWORD (*FCdecl13Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8, 233 | DWORD arg9,DWORD arg10,DWORD arg11,DWORD arg12,DWORD arg13); 234 | typedef DWORD (*FCdecl14Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8, 235 | DWORD arg9,DWORD arg10,DWORD arg11,DWORD arg12,DWORD arg13,DWORD arg14); 236 | typedef DWORD (*FCdecl15Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8, 237 | DWORD arg9,DWORD arg10,DWORD arg11,DWORD arg12,DWORD arg13,DWORD arg14,DWORD arg15); 238 | typedef DWORD (*FCdecl16Args)(DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4,DWORD arg5,DWORD arg6,DWORD arg7,DWORD arg8, 239 | DWORD arg9,DWORD arg10,DWORD arg11,DWORD arg12,DWORD arg13,DWORD arg14,DWORD arg15, 240 | DWORD arg16); 241 | 242 | inline DWORD _InvokeC(LPCVOID fun) 243 | { 244 | return ((FCdecl0Args)fun)(); 245 | } 246 | 247 | template DWORD _InvokeC(LPCVOID fun,T1 arg1) 248 | { 249 | return ((FCdecl1Args)fun)((DWORD)arg1); 250 | } 251 | 252 | template DWORD _InvokeC(LPCVOID fun,T1 arg1,T2 arg2) 253 | { 254 | return ((FCdecl2Args)fun)((DWORD)arg1,(DWORD)arg2); 255 | } 256 | 257 | template DWORD _InvokeC(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3) 258 | { 259 | return ((FCdecl3Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3); 260 | } 261 | 262 | template DWORD _InvokeC(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4) 263 | { 264 | return ((FCdecl4Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4); 265 | } 266 | 267 | template 268 | DWORD _InvokeC(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5) 269 | { 270 | return ((FCdecl5Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5); 271 | } 272 | 273 | template 274 | DWORD _InvokeC(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6) 275 | { 276 | return ((FCdecl6Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6); 277 | } 278 | 279 | template 280 | DWORD _InvokeC(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7) 281 | { 282 | return ((FCdecl7Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7); 283 | } 284 | 285 | template 286 | DWORD _InvokeC(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8) 287 | { 288 | return ((FCdecl8Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8); 289 | } 290 | 291 | template 292 | DWORD _InvokeC(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9) 293 | { 294 | return ((FCdecl9Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8, 295 | (DWORD)arg9); 296 | } 297 | 298 | template 299 | DWORD _InvokeC(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9,T10 arg10) 300 | { 301 | return ((FCdecl10Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8, 302 | (DWORD)arg9,(DWORD)arg10); 303 | } 304 | 305 | template 307 | DWORD _InvokeC(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9,T10 arg10, 308 | T11 arg11) 309 | { 310 | return ((FCdecl11Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8, 311 | (DWORD)arg9,(DWORD)arg10,(DWORD)arg11); 312 | } 313 | 314 | template 316 | DWORD _InvokeC(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9,T10 arg10, 317 | T11 arg11,T12 arg12) 318 | { 319 | return ((FCdecl12Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8, 320 | (DWORD)arg9,(DWORD)arg10,(DWORD)arg11,(DWORD)arg12); 321 | } 322 | 323 | template 325 | DWORD _InvokeC(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9,T10 arg10, 326 | T11 arg11,T12 arg12,T13 arg13) 327 | { 328 | return ((FCdecl13Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8, 329 | (DWORD)arg9,(DWORD)arg10,(DWORD)arg11,(DWORD)arg12,(DWORD)arg13); 330 | } 331 | 332 | template 334 | DWORD _InvokeC(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9,T10 arg10, 335 | T11 arg11,T12 arg12,T13 arg13,T14 arg14) 336 | { 337 | return ((FCdecl14Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8, 338 | (DWORD)arg9,(DWORD)arg10,(DWORD)arg11,(DWORD)arg12,(DWORD)arg13,(DWORD)arg14); 339 | } 340 | 341 | template 343 | DWORD _InvokeC(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9,T10 arg10, 344 | T11 arg11,T12 arg12,T13 arg13,T14 arg14,T15 arg15) 345 | { 346 | return ((FCdecl15Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8, 347 | (DWORD)arg9,(DWORD)arg10,(DWORD)arg11,(DWORD)arg12,(DWORD)arg13,(DWORD)arg14,(DWORD)arg15); 348 | } 349 | 350 | template 352 | DWORD _InvokeC(LPCVOID fun,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,T7 arg7,T8 arg8,T9 arg9,T10 arg10, 353 | T11 arg11,T12 arg12,T13 arg13,T14 arg14,T15 arg15,T16 arg16) 354 | { 355 | return ((FCdecl16Args)fun)((DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4,(DWORD)arg5,(DWORD)arg6,(DWORD)arg7,(DWORD)arg8, 356 | (DWORD)arg9,(DWORD)arg10,(DWORD)arg11,(DWORD)arg12,(DWORD)arg13,(DWORD)arg14,(DWORD)arg15,(DWORD)arg16); 357 | } 358 | 359 | #define INVOKE_C(fun, ...) _InvokeC(fun,__VA_ARGS__) 360 | 361 | enum Register{ 362 | REG_UNK = 0, 363 | R32_EAX = 7, 364 | R32_EBX = 7*2, 365 | R32_ECX = 7*3, 366 | R32_EDX = 7*4, 367 | R32_ESI = 7*5, 368 | R32_EDI = 7*6, 369 | R32_EBP = 7*7, 370 | }; 371 | 372 | struct RegVal 373 | { 374 | Register reg; 375 | DWORD value; 376 | }; 377 | 378 | class RegValues 379 | { 380 | public: 381 | RegVal regValues[7]; 382 | 383 | RegValues(Register r1 = REG_UNK,DWORD v1 = 0,Register r2 = REG_UNK,DWORD v2 = 0, 384 | Register r3 = REG_UNK,DWORD v3 = 0,Register r4 = REG_UNK,DWORD v4 = 0, 385 | Register r5 = REG_UNK,DWORD v5 = 0,Register r6 = REG_UNK,DWORD v6 = 0, 386 | Register r7 = REG_UNK,DWORD v7 = 0) 387 | { 388 | memcpy(®Values,&r1,sizeof(regValues)); 389 | } 390 | }; 391 | 392 | DWORD InvokeFunEx(LPCVOID fun, RegValues regValues); 393 | DWORD InvokeFunEx(LPCVOID fun, RegValues regValues, DWORD arg1); 394 | DWORD InvokeFunEx(LPCVOID fun, RegValues regValues, DWORD arg1,DWORD arg2); 395 | DWORD InvokeFunEx(LPCVOID fun, RegValues regValues, DWORD arg1,DWORD arg2,DWORD arg3); 396 | DWORD InvokeFunEx(LPCVOID fun, RegValues regValues, DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4); 397 | 398 | inline DWORD _InvokeFunEx(LPCVOID fun,RegValues& regValues) 399 | { 400 | return InvokeFunEx(fun,regValues); 401 | } 402 | 403 | template DWORD _InvokeFunEx(LPCVOID fun, RegValues& regValues, T1 arg1) 404 | { 405 | return InvokeFunEx(fun,regValues,(DWORD)arg1); 406 | } 407 | 408 | template DWORD _InvokeFunEx(LPCVOID fun, RegValues& regValues, T1 arg1,T2 arg2) 409 | { 410 | return InvokeFunEx(fun,regValues,(DWORD)arg1,(DWORD)arg2); 411 | } 412 | 413 | template DWORD _InvokeFunEx(LPCVOID fun, RegValues& regValues, T1 arg1,T2 arg2,T3 arg3) 414 | { 415 | return InvokeFunEx(fun,regValues,(DWORD)arg1,(DWORD)arg2,(DWORD)arg3); 416 | } 417 | 418 | template 419 | DWORD _InvokeFunEx(LPCVOID fun, RegValues& regValues, T1 arg1,T2 arg2,T3 arg3,T4 arg4) 420 | { 421 | return InvokeFunEx(fun,regValues,(DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4); 422 | } 423 | 424 | #define INVOKE_EX(fun, ...) _InvokeFunEx(fun,__VA_ARGS__) 425 | 426 | DWORD InvokeFunExC(LPCVOID fun, RegValues regValues); 427 | DWORD InvokeFunExC(LPCVOID fun, RegValues regValues, DWORD arg1); 428 | DWORD InvokeFunExC(LPCVOID fun, RegValues regValues, DWORD arg1,DWORD arg2); 429 | DWORD InvokeFunExC(LPCVOID fun, RegValues regValues, DWORD arg1,DWORD arg2,DWORD arg3); 430 | DWORD InvokeFunExC(LPCVOID fun, RegValues regValues, DWORD arg1,DWORD arg2,DWORD arg3,DWORD arg4); 431 | 432 | inline DWORD _InvokeFunExC(LPCVOID fun,RegValues& regValues) 433 | { 434 | return InvokeFunExC(fun,regValues); 435 | } 436 | 437 | template DWORD _InvokeFunExC(LPCVOID fun, RegValues& regValues, T1 arg1) 438 | { 439 | return InvokeFunExC(fun,regValues,(DWORD)arg1); 440 | } 441 | 442 | template DWORD _InvokeFunExC(LPCVOID fun, RegValues& regValues, T1 arg1,T2 arg2) 443 | { 444 | return InvokeFunExC(fun,regValues,(DWORD)arg1,(DWORD)arg2); 445 | } 446 | 447 | template DWORD _InvokeFunExC(LPCVOID fun, RegValues& regValues, T1 arg1,T2 arg2,T3 arg3) 448 | { 449 | return InvokeFunExC(fun,regValues,(DWORD)arg1,(DWORD)arg2,(DWORD)arg3); 450 | } 451 | 452 | template 453 | DWORD _InvokeFunExC(LPCVOID fun, RegValues& regValues, T1 arg1,T2 arg2,T3 arg3,T4 arg4) 454 | { 455 | return InvokeFunExC(fun,regValues,(DWORD)arg1,(DWORD)arg2,(DWORD)arg3,(DWORD)arg4); 456 | } 457 | 458 | #define INVOKE_EX_C(fun, ...) _InvokeFunExC(fun,__VA_ARGS__) 459 | 460 | struct _EH4_SCOPETABLE_RECORD { 461 | DWORD EnclosingLevel; 462 | LPVOID FilterFunc; 463 | LPVOID HandlerFunc; 464 | }; 465 | 466 | struct _EH4_SCOPETABLE { 467 | UINT GSCookieOffset; 468 | UINT GSCookieXOROffset; 469 | UINT EHCookieOffset; 470 | UINT EHCookieXOROffset; 471 | _EH4_SCOPETABLE_RECORD ScopeRecord[1]; 472 | }; 473 | 474 | #define SEH_SET_FILTER(_tbl,_index,_fFilter,_fHandler) \ 475 | __asm mov dword ptr [offset _tbl + 16 + _index*12 + 4], offset _fFilter \ 476 | __asm mov dword ptr [offset _tbl + 16 + _index*12 + 8], offset _fHandler 477 | 478 | void __stdcall imul8(CHAR val, DWORD* vEaxEdx); 479 | void __stdcall imul32(INT val, DWORD* vEaxEdx); 480 | void __stdcall idiv8(CHAR val, DWORD* vEaxEdx); 481 | void __stdcall idiv32(INT val, DWORD* vEaxEdx); 482 | 483 | DWORD MagicDiv7(INT val, INT nShift); 484 | DWORD MagicDiv100(INT val, INT nShift); -------------------------------------------------------------------------------- /Tools/DebugTools.cpp: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | File Name : DLL Decompile Debug Tools 3 | Author : Zhixian Lin 4 | Date : 2017 5 | Description : The debug tools for decompile work. 6 | Copyright : www.dll-decompiler.com, all rights reserved. 7 | E-mail : support@dll-decompiler.com 8 | *******************************************************************************/ 9 | 10 | #include "StdAfx.h" 11 | #include "DDTools.h" 12 | #include "DebugTools.h" 13 | 14 | #ifdef _DEBUG 15 | TlsIndex _debuggerTlsIndex; 16 | 17 | DebugContext::DebugContext(INT nInst) 18 | { 19 | m_nStackSize = 1000; 20 | m_stack = (CallRecord*)malloc(m_nStackSize * sizeof(CallRecord)); 21 | m_nStackUsed = 0; 22 | 23 | m_nInst = nInst; 24 | m_espEbp = (EspEbpOfs*)malloc(m_nInst * sizeof(EspEbpOfs)); 25 | memset(m_espEbp,0,m_nInst * sizeof(EspEbpOfs)); 26 | } 27 | 28 | DebugContext::~DebugContext() 29 | { 30 | if(m_stack) 31 | free(m_stack); 32 | if(m_espEbp) 33 | free(m_espEbp); 34 | } 35 | 36 | void DebugContext::PushRecord(DWORD _esp, DWORD _idFun) 37 | { 38 | if(m_nStackUsed + 1 > m_nStackSize) 39 | { 40 | m_nStackSize *= 2; 41 | m_stack = (CallRecord*)realloc(m_stack,m_nStackSize * sizeof(CallRecord)); 42 | } 43 | 44 | m_stack[m_nStackUsed]._esp = _esp; 45 | m_stack[m_nStackUsed]._idFun = _idFun; 46 | m_nStackUsed++; 47 | } 48 | 49 | INT DebugContext::PopRecord(DWORD _esp) 50 | { 51 | if(m_nStackUsed <= 0) 52 | return m_nStackUsed; 53 | 54 | while(m_nStackUsed > 0) 55 | { 56 | if(m_stack[m_nStackUsed - 1]._esp > _esp) 57 | return m_nStackUsed; 58 | 59 | m_nStackUsed--; 60 | } 61 | 62 | return m_nStackUsed; 63 | } 64 | 65 | void DebugContext::LogEspEbp(DWORD idFun, INT iInst, DWORD addr, DWORD _esp, DWORD _ebp) 66 | { 67 | if(m_nStackUsed <= 0) 68 | return; 69 | 70 | if(iInst >= 0 && iInst < m_nInst) 71 | { 72 | DWORD funEsp; 73 | 74 | INT index = m_nStackUsed - 1; 75 | while(index >= 0) 76 | { 77 | if(m_stack[index]._idFun==idFun) 78 | { 79 | funEsp = m_stack[index]._esp; 80 | 81 | /* Log the ESP and EBP offset value to know which local variable or argument the instruction is using. */ 82 | m_espEbp[iInst].addr = addr; 83 | m_espEbp[iInst].espOfs = _esp - funEsp; 84 | m_espEbp[iInst].ebpOfs = _ebp - funEsp; 85 | break; 86 | } 87 | 88 | index--; 89 | } 90 | } 91 | } 92 | 93 | static void __stdcall __Debug_OnEnterFun(DWORD _esp, DWORD _idFun, INT nInst) 94 | { 95 | DebugContext* ctx; 96 | 97 | _esp += 0x38; //Get the esp value before _Debug_OnEnterFun is invoked 98 | 99 | ASSERT(_debuggerTlsIndex != TLS_OUT_OF_INDEXES); 100 | 101 | ctx = (DebugContext*)TlsGetValue(_debuggerTlsIndex); 102 | if(!ctx) 103 | { 104 | ctx = new DebugContext(nInst); 105 | TlsSetValue(_debuggerTlsIndex,ctx); 106 | } 107 | 108 | ctx->PushRecord(_esp,_idFun); 109 | } 110 | 111 | __declspec(naked) void __stdcall _Debug_OnEnterFun(DWORD idFun, INT nInst) 112 | { 113 | __asm{ 114 | pushad 115 | pushfd 116 | 117 | push dword ptr [esp + 0x2C] //nInst 118 | push dword ptr [esp + 0x2C] //idFun 119 | push esp 120 | call __Debug_OnEnterFun 121 | 122 | popfd 123 | popad 124 | retn 8 125 | } 126 | } 127 | 128 | void DebugContext::OutputThreadLog(FOutputThreadLog fOut) 129 | { 130 | if(!fOut) 131 | return; 132 | 133 | fOut(m_espEbp,m_nInst); 134 | } 135 | 136 | static void __stdcall __Debug_OnExitFun(DWORD _esp, FOutputThreadLog fOut) 137 | { 138 | DebugContext* ctx; 139 | 140 | _esp += 0x30; //Get the esp value before _Debug_OnExitFun is invoked 141 | 142 | ASSERT(_debuggerTlsIndex != TLS_OUT_OF_INDEXES); 143 | 144 | ctx = (DebugContext*)TlsGetValue(_debuggerTlsIndex); 145 | if(ctx && ctx->PopRecord(_esp) <= 0) 146 | { 147 | ctx->OutputThreadLog(fOut); 148 | 149 | /* It is about to exit the first invoked function, so we delete the DebugContext. */ 150 | delete ctx; 151 | TlsSetValue(_debuggerTlsIndex,NULL); 152 | } 153 | } 154 | 155 | __declspec(naked) void __stdcall _Debug_OnExitFun(FOutputThreadLog fOut) 156 | { 157 | __asm{ 158 | pushad 159 | pushfd 160 | 161 | push dword ptr [esp + 0x28] //fOut 162 | push esp 163 | call __Debug_OnExitFun 164 | 165 | popfd 166 | popad 167 | retn 4 168 | } 169 | } 170 | 171 | static void __stdcall __Debug_LogEspEbp(DWORD idFun, INT iInst, DWORD addr, DWORD _esp, DWORD _ebp) 172 | { 173 | DebugContext* ctx; 174 | 175 | _esp += 0x38; //Get the esp value before _Debug_LogEspEbp is invoked 176 | 177 | ASSERT(_debuggerTlsIndex != TLS_OUT_OF_INDEXES); 178 | 179 | ctx = (DebugContext*)TlsGetValue(_debuggerTlsIndex); 180 | if(ctx) 181 | ctx->LogEspEbp(idFun,iInst,addr,_esp,_ebp); 182 | } 183 | 184 | __declspec(naked) void __stdcall _Debug_LogEspEbp(DWORD idFun, INT iInst, DWORD addr) 185 | { 186 | __asm{ 187 | pushad 188 | pushfd 189 | 190 | push ebp 191 | push esp 192 | push dword ptr [esp + 0x38] //addr 193 | push dword ptr [esp + 0x38] //iInst 194 | push dword ptr [esp + 0x38] //idFun 195 | call __Debug_LogEspEbp 196 | 197 | popfd 198 | popad 199 | retn 0xC 200 | } 201 | } 202 | #endif //#ifdef _DEBUG -------------------------------------------------------------------------------- /Tools/DebugTools.h: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | File Name : DLL Decompile Debug Tools 3 | Author : Zhixian Lin 4 | Date : 2017 5 | Description : The debug tools for decompile work. 6 | Copyright : www.dll-decompiler.com, all rights reserved. 7 | E-mail : support@dll-decompiler.com 8 | *******************************************************************************/ 9 | 10 | #pragma once 11 | 12 | #ifdef _DEBUG 13 | struct CallRecord 14 | { 15 | DWORD _esp; //The ESP value when enter the function 16 | DWORD _idFun; //Function id 17 | }; 18 | 19 | //ESP EBP offset 20 | struct EspEbpOfs 21 | { 22 | DWORD addr; //Address of the instruction 23 | INT espOfs; //ESP offset in current function 24 | INT ebpOfs; //EBP offset in current function 25 | }; 26 | 27 | typedef void (*FOutputThreadLog)(const EspEbpOfs* espEbp, INT nInst); 28 | 29 | class DebugContext 30 | { 31 | protected: 32 | CallRecord* m_stack; //Call Record Stack 33 | INT m_nStackSize; //Call Record Stack size 34 | INT m_nStackUsed; //Call Record Stack size used 35 | 36 | EspEbpOfs* m_espEbp; //ESP EBP log 37 | INT m_nInst; //Instruction count 38 | public: 39 | DebugContext(INT nInst); 40 | ~DebugContext(); 41 | 42 | void PushRecord(DWORD _esp, DWORD _idFun); 43 | INT PopRecord(DWORD _esp); 44 | 45 | void LogEspEbp(DWORD idFun, INT iInst, DWORD addr, DWORD _esp, DWORD _ebp); 46 | void OutputThreadLog(FOutputThreadLog fOut); 47 | }; 48 | 49 | void __stdcall _Debug_OnEnterFun(DWORD idFun, INT nInst); 50 | void __stdcall _Debug_OnExitFun(FOutputThreadLog fOut); 51 | void __stdcall _Debug_LogEspEbp(DWORD idFun, INT iInst, DWORD addr); 52 | 53 | /* 54 | Log the exit function event. 55 | Must be put before each RET instruction and at the end of each fuction. 56 | fOutputThreadLog: The function to output the log of current thread. 57 | */ 58 | #define ON_EXIT_FUN(fOutputThreadLog) __asm push offset fOutputThreadLog __asm call _Debug_OnExitFun 59 | 60 | /* 61 | Log the current ESP value. 62 | iInst: The instruction index. 63 | */ 64 | #define LOG_ESP_EBP(idFun, iInst, addr) __asm push addr __asm push iInst __asm push idFun __asm call _Debug_LogEspEbp 65 | 66 | #else 67 | #define ON_EXIT_FUN(fOutputThreadLog) 68 | #define LOG_ESP_EBP(idFun, iInst, addr) 69 | #endif //#ifdef _DEBUG -------------------------------------------------------------------------------- /Tools/LongJump.cpp: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | File Name : Long Jumps 3 | Author : Zhixian Lin 4 | Date : 2016 5 | Description : As a part of DLL to C. 6 | Copyright : www.dll-decompiler.com, all rights reserved. 7 | E-mail : support@dll-decompiler.com 8 | *******************************************************************************/ 9 | 10 | #include "StdAfx.h" 11 | #include "LongJump.h" 12 | 13 | __declspec(naked) void __stdcall ja_long(DWORD destAddr) 14 | { 15 | __asm{ 16 | ja jump 17 | retn 4 18 | jump: 19 | add esp,4 20 | retn 21 | } 22 | } 23 | 24 | __declspec(naked) void __stdcall jae_long(DWORD destAddr) 25 | { 26 | __asm{ 27 | jae jump 28 | retn 4 29 | jump: 30 | add esp,4 31 | retn 32 | } 33 | } 34 | 35 | __declspec(naked) void __stdcall jb_long(DWORD destAddr) 36 | { 37 | __asm{ 38 | jb jump 39 | retn 4 40 | jump: 41 | add esp,4 42 | retn 43 | } 44 | } 45 | 46 | __declspec(naked) void __stdcall jbe_long(DWORD destAddr) 47 | { 48 | __asm{ 49 | jbe jump 50 | retn 4 51 | jump: 52 | add esp,4 53 | retn 54 | } 55 | } 56 | 57 | __declspec(naked) void __stdcall jc_long(DWORD destAddr) 58 | { 59 | __asm{ 60 | jc jump 61 | retn 4 62 | jump: 63 | add esp,4 64 | retn 65 | } 66 | } 67 | 68 | __declspec(naked) void __stdcall jecxz_long(DWORD destAddr) 69 | { 70 | __asm{ 71 | jecxz jump 72 | retn 4 73 | jump: 74 | add esp,4 75 | retn 76 | } 77 | } 78 | 79 | __declspec(naked) void __stdcall je_long(DWORD destAddr) 80 | { 81 | __asm{ 82 | je jump 83 | retn 4 84 | jump: 85 | add esp,4 86 | retn 87 | } 88 | } 89 | 90 | __declspec(naked) void __stdcall jl_long(DWORD destAddr) 91 | { 92 | __asm{ 93 | jl jump 94 | retn 4 95 | jump: 96 | add esp,4 97 | retn 98 | } 99 | } 100 | 101 | __declspec(naked) void __stdcall jle_long(DWORD destAddr) 102 | { 103 | __asm{ 104 | jle jump 105 | retn 4 106 | jump: 107 | add esp,4 108 | retn 109 | } 110 | } 111 | 112 | __declspec(naked) void __stdcall jg_long(DWORD destAddr) 113 | { 114 | __asm{ 115 | jg jump 116 | retn 4 117 | jump: 118 | add esp,4 119 | retn 120 | } 121 | } 122 | 123 | __declspec(naked) void __stdcall jge_long(DWORD destAddr) 124 | { 125 | __asm{ 126 | jge jump 127 | retn 4 128 | jump: 129 | add esp,4 130 | retn 131 | } 132 | } 133 | 134 | __declspec(naked) void __stdcall jna_long(DWORD destAddr) 135 | { 136 | __asm{ 137 | jna jump 138 | retn 4 139 | jump: 140 | add esp,4 141 | retn 142 | } 143 | } 144 | 145 | __declspec(naked) void __stdcall jnae_long(DWORD destAddr) 146 | { 147 | __asm{ 148 | jnae jump 149 | retn 4 150 | jump: 151 | add esp,4 152 | retn 153 | } 154 | } 155 | 156 | __declspec(naked) void __stdcall jnb_long(DWORD destAddr) 157 | { 158 | __asm{ 159 | jnb jump 160 | retn 4 161 | jump: 162 | add esp,4 163 | retn 164 | } 165 | } 166 | 167 | __declspec(naked) void __stdcall jnbe_long(DWORD destAddr) 168 | { 169 | __asm{ 170 | jnbe jump 171 | retn 4 172 | jump: 173 | add esp,4 174 | retn 175 | } 176 | } 177 | 178 | __declspec(naked) void __stdcall jnc_long(DWORD destAddr) 179 | { 180 | __asm{ 181 | jnc jump 182 | retn 4 183 | jump: 184 | add esp,4 185 | retn 186 | } 187 | } 188 | 189 | __declspec(naked) void __stdcall jne_long(DWORD destAddr) 190 | { 191 | __asm{ 192 | jne jump 193 | retn 4 194 | jump: 195 | add esp,4 196 | retn 197 | } 198 | } 199 | 200 | __declspec(naked) void __stdcall jng_long(DWORD destAddr) 201 | { 202 | __asm{ 203 | jng jump 204 | retn 4 205 | jump: 206 | add esp,4 207 | retn 208 | } 209 | } 210 | 211 | __declspec(naked) void __stdcall jnge_long(DWORD destAddr) 212 | { 213 | __asm{ 214 | jnge jump 215 | retn 4 216 | jump: 217 | add esp,4 218 | retn 219 | } 220 | } 221 | 222 | __declspec(naked) void __stdcall jnl_long(DWORD destAddr) 223 | { 224 | __asm{ 225 | jnl jump 226 | retn 4 227 | jump: 228 | add esp,4 229 | retn 230 | } 231 | } 232 | 233 | __declspec(naked) void __stdcall jnle_long(DWORD destAddr) 234 | { 235 | __asm{ 236 | jnle jump 237 | retn 4 238 | jump: 239 | add esp,4 240 | retn 241 | } 242 | } 243 | 244 | __declspec(naked) void __stdcall jno_long(DWORD destAddr) 245 | { 246 | __asm{ 247 | jno jump 248 | retn 4 249 | jump: 250 | add esp,4 251 | retn 252 | } 253 | } 254 | 255 | __declspec(naked) void __stdcall jnp_long(DWORD destAddr) 256 | { 257 | __asm{ 258 | jnp jump 259 | retn 4 260 | jump: 261 | add esp,4 262 | retn 263 | } 264 | } 265 | 266 | __declspec(naked) void __stdcall jns_long(DWORD destAddr) 267 | { 268 | __asm{ 269 | jns jump 270 | retn 4 271 | jump: 272 | add esp,4 273 | retn 274 | } 275 | } 276 | 277 | __declspec(naked) void __stdcall jnz_long(DWORD destAddr) 278 | { 279 | __asm{ 280 | jnz jump 281 | retn 4 282 | jump: 283 | add esp,4 284 | retn 285 | } 286 | } 287 | 288 | __declspec(naked) void __stdcall jo_long(DWORD destAddr) 289 | { 290 | __asm{ 291 | jo jump 292 | retn 4 293 | jump: 294 | add esp,4 295 | retn 296 | } 297 | } 298 | 299 | __declspec(naked) void __stdcall jp_long(DWORD destAddr) 300 | { 301 | __asm{ 302 | jp jump 303 | retn 4 304 | jump: 305 | add esp,4 306 | retn 307 | } 308 | } 309 | 310 | __declspec(naked) void __stdcall jpe_long(DWORD destAddr) 311 | { 312 | __asm{ 313 | jpe jump 314 | retn 4 315 | jump: 316 | add esp,4 317 | retn 318 | } 319 | } 320 | 321 | __declspec(naked) void __stdcall jpo_long(DWORD destAddr) 322 | { 323 | __asm{ 324 | jpo jump 325 | retn 4 326 | jump: 327 | add esp,4 328 | retn 329 | } 330 | } 331 | 332 | __declspec(naked) void __stdcall js_long(DWORD destAddr) 333 | { 334 | __asm{ 335 | js jump 336 | retn 4 337 | jump: 338 | add esp,4 339 | retn 340 | } 341 | } 342 | 343 | __declspec(naked) void __stdcall jz_long(DWORD destAddr) 344 | { 345 | __asm{ 346 | jz jump 347 | retn 4 348 | jump: 349 | add esp,4 350 | retn 351 | } 352 | } -------------------------------------------------------------------------------- /Tools/LongJump.h: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | File Name : Long Jumps 3 | Author : Zhixian Lin 4 | Date : 2016 5 | Description : As a part of DLL to C. 6 | Copyright : www.dll-decompiler.com, all rights reserved. 7 | E-mail : support@dll-decompiler.com 8 | *******************************************************************************/ 9 | 10 | #pragma once 11 | 12 | void __stdcall ja_long(DWORD destAddr); 13 | void __stdcall jae_long(DWORD destAddr); 14 | void __stdcall jb_long(DWORD destAddr); 15 | void __stdcall jbe_long(DWORD destAddr); 16 | void __stdcall jc_long(DWORD destAddr); 17 | void __stdcall jecxz_long(DWORD destAddr); 18 | void __stdcall je_long(DWORD destAddr); 19 | void __stdcall jg_long(DWORD destAddr); 20 | void __stdcall jge_long(DWORD destAddr); 21 | void __stdcall jl_long(DWORD destAddr); 22 | void __stdcall jle_long(DWORD destAddr); 23 | void __stdcall jna_long(DWORD destAddr); 24 | void __stdcall jnae_long(DWORD destAddr); 25 | void __stdcall jnb_long(DWORD destAddr); 26 | void __stdcall jnbe_long(DWORD destAddr); 27 | void __stdcall jnc_long(DWORD destAddr); 28 | void __stdcall jne_long(DWORD destAddr); 29 | void __stdcall jng_long(DWORD destAddr); 30 | void __stdcall jnge_long(DWORD destAddr); 31 | void __stdcall jnl_long(DWORD destAddr); 32 | void __stdcall jnle_long(DWORD destAddr); 33 | void __stdcall jno_long(DWORD destAddr); 34 | void __stdcall jnp_long(DWORD destAddr); 35 | void __stdcall jns_long(DWORD destAddr); 36 | void __stdcall jnz_long(DWORD destAddr); 37 | void __stdcall jo_long(DWORD destAddr); 38 | void __stdcall jp_long(DWORD destAddr); 39 | void __stdcall jpe_long(DWORD destAddr); 40 | void __stdcall jpo_long(DWORD destAddr); 41 | void __stdcall js_long(DWORD destAddr); 42 | void __stdcall jz_long(DWORD destAddr); 43 | 44 | #define CALL_LONG(func) __asm push func __asm add esp,4 __asm call dword ptr [esp-4] 45 | #define JA_LONG(destAddr) __asm push destAddr __asm call ja_long 46 | #define JAE_LONG(destAddr) __asm push destAddr __asm call jae_long 47 | #define JB_LONG(destAddr) __asm push destAddr __asm call jb_long 48 | #define JBE_LONG(destAddr) __asm push destAddr __asm call jbe_long 49 | #define JC_LONG(destAddr) __asm push destAddr __asm call jc_long 50 | #define JECXZ_LONG(destAddr) __asm push destAddr __asm call jecxz_long 51 | #define JE_LONG(destAddr) __asm push destAddr __asm call je_long 52 | #define JG_LONG(destAddr) __asm push destAddr __asm call jg_long 53 | #define JGE_LONG(destAddr) __asm push destAddr __asm call jge_long 54 | #define JL_LONG(destAddr) __asm push destAddr __asm call jl_long 55 | #define JLE_LONG(destAddr) __asm push destAddr __asm call jle_long 56 | #define JNA_LONG(destAddr) __asm push destAddr __asm call jna_long 57 | #define JNAE_LONG(destAddr) __asm push destAddr __asm call jnae_long 58 | #define JNB_LONG(destAddr) __asm push destAddr __asm call jnb_long 59 | #define JNBE_LONG(destAddr) __asm push destAddr __asm call jnbe_long 60 | #define JNC_LONG(destAddr) __asm push destAddr __asm call jnc_long 61 | #define JNE_LONG(destAddr) __asm push destAddr __asm call jne_long 62 | #define JNG_LONG(destAddr) __asm push destAddr __asm call jng_long 63 | #define JNL_LONG(destAddr) __asm push destAddr __asm call jnl_long 64 | #define JNLE_LONG(destAddr) __asm push destAddr __asm call jnle_long 65 | #define JNGE_LONG(destAddr) __asm push destAddr __asm call jnge_long 66 | #define JNO_LONG(destAddr) __asm push destAddr __asm call jno_long 67 | #define JNP_LONG(destAddr) __asm push destAddr __asm call jnp_long 68 | #define JNS_LONG(destAddr) __asm push destAddr __asm call jns_long 69 | #define JNZ_LONG(destAddr) __asm push destAddr __asm call jnz_long 70 | #define JO_LONG(destAddr) __asm push destAddr __asm call jo_long 71 | #define JP_LONG(destAddr) __asm push destAddr __asm call jp_long 72 | #define JPE_LONG(destAddr) __asm push destAddr __asm call jpe_long 73 | #define JPO_LONG(destAddr) __asm push destAddr __asm call jpo_long 74 | #define JS_LONG(destAddr) __asm push destAddr __asm call js_long 75 | #define JZ_LONG(destAddr) __asm push destAddr __asm call jz_long 76 | #define JMP_LONG(destAddr) __asm push destAddr __asm ret --------------------------------------------------------------------------------