├── .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
--------------------------------------------------------------------------------