Mercurial > mplayer.hg
annotate loader/module.c @ 14379:30d62dbb5520
lavc is reintegrated, just as it was before removal some commits ago
it hasn't been touched yet (no work done yet) so it's neither reformatted nor up to date
author | kraymer |
---|---|
date | Wed, 05 Jan 2005 23:32:38 +0000 |
parents | 3db10035d297 |
children | f5537cc95b02 |
rev | line source |
---|---|
1 | 1 /* |
2 * Modules | |
3 * | |
4 * Copyright 1995 Alexandre Julliard | |
5 */ | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
6 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
7 // define for quicktime calls debugging and/or MacOS-level emulation: |
8286
1a9ea966d840
patching out threads ;) raw measure: 18% cpu instead 30%
alex
parents:
8277
diff
changeset
|
8 #define EMU_QTX_API |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
9 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
10 // define for quicktime debugging (verbose logging): |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
11 //#define DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
12 |
3465 | 13 #include "config.h" |
1 | 14 |
15 #include <assert.h> | |
16 #include <errno.h> | |
17 #include <fcntl.h> | |
18 #include <stdio.h> | |
19 #include <stdlib.h> | |
20 #include <string.h> | |
21 #include <unistd.h> | |
22 #include <sys/mman.h> | |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
23 #include <inttypes.h> |
1 | 24 |
7386 | 25 #include "wine/windef.h" |
26 #include "wine/winerror.h" | |
27 #include "wine/heap.h" | |
28 #include "wine/module.h" | |
29 #include "wine/pe_image.h" | |
30 #include "wine/debugtools.h" | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
31 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
32 #undef HAVE_LIBDL |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
33 |
2069 | 34 #ifdef HAVE_LIBDL |
35 #include <dlfcn.h> | |
7386 | 36 #include "wine/elfdll.h" |
2069 | 37 #endif |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
128
diff
changeset
|
38 #include "win32.h" |
7386 | 39 #include "driver.h" |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
40 |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
41 #ifdef EMU_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
42 #include "wrapper.h" |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
43 static int report_func(void *stack_base, int stack_size, reg386_t *reg, uint32_t *flags); |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
44 static int report_func_ret(void *stack_base, int stack_size, reg386_t *reg, uint32_t *flags); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
45 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
46 |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
47 //#undef TRACE |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
48 //#define TRACE printf |
1 | 49 |
50 //WINE_MODREF *local_wm=NULL; | |
51 modref_list* local_wm=NULL; | |
52 | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
53 HANDLE SegptrHeap; |
2069 | 54 |
3465 | 55 WINE_MODREF* MODULE_FindModule(LPCSTR m) |
1 | 56 { |
57 modref_list* list=local_wm; | |
8277 | 58 TRACE("FindModule: Module %s request\n", m); |
1 | 59 if(list==NULL) |
60 return NULL; | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
61 // while(strcmp(m, list->wm->filename)) |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
62 while(!strstr(list->wm->filename, m)) |
1 | 63 { |
128 | 64 TRACE("%s: %x\n", list->wm->filename, list->wm->module); |
1 | 65 list=list->prev; |
66 if(list==NULL) | |
67 return NULL; | |
2069 | 68 } |
1 | 69 TRACE("Resolved to %s\n", list->wm->filename); |
70 return list->wm; | |
2069 | 71 } |
1 | 72 |
1307
d8c1b0b38edc
Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents:
128
diff
changeset
|
73 static void MODULE_RemoveFromList(WINE_MODREF *mod) |
1 | 74 { |
75 modref_list* list=local_wm; | |
76 if(list==0) | |
77 return; | |
78 if(mod==0) | |
79 return; | |
80 if((list->prev==NULL)&&(list->next==NULL)) | |
81 { | |
82 free(list); | |
83 local_wm=NULL; | |
84 // uninstall_fs(); | |
85 return; | |
86 } | |
87 for(;list;list=list->prev) | |
88 { | |
89 if(list->wm==mod) | |
90 { | |
91 if(list->prev) | |
92 list->prev->next=list->next; | |
93 if(list->next) | |
94 list->next->prev=list->prev; | |
95 if(list==local_wm) | |
96 local_wm=list->prev; | |
97 free(list); | |
98 return; | |
99 } | |
100 } | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
101 |
2069 | 102 } |
103 | |
1 | 104 WINE_MODREF *MODULE32_LookupHMODULE(HMODULE m) |
105 { | |
106 modref_list* list=local_wm; | |
8277 | 107 TRACE("LookupHMODULE: Module %X request\n", m); |
1 | 108 if(list==NULL) |
8277 | 109 { |
110 TRACE("LookupHMODULE failed\n"); | |
1 | 111 return NULL; |
8277 | 112 } |
1 | 113 while(m!=list->wm->module) |
114 { | |
115 // printf("Checking list %X wm %X module %X\n", | |
116 // list, list->wm, list->wm->module); | |
117 list=list->prev; | |
118 if(list==NULL) | |
8277 | 119 { |
120 TRACE("LookupHMODULE failed\n"); | |
1 | 121 return NULL; |
8277 | 122 } |
2069 | 123 } |
124 TRACE("LookupHMODULE hit %p\n", list->wm); | |
1 | 125 return list->wm; |
2069 | 126 } |
1 | 127 |
128 /************************************************************************* | |
129 * MODULE_InitDll | |
130 */ | |
131 static WIN_BOOL MODULE_InitDll( WINE_MODREF *wm, DWORD type, LPVOID lpReserved ) | |
132 { | |
133 WIN_BOOL retv = TRUE; | |
134 | |
2069 | 135 static LPCSTR typeName[] = { "PROCESS_DETACH", "PROCESS_ATTACH", |
1 | 136 "THREAD_ATTACH", "THREAD_DETACH" }; |
137 assert( wm ); | |
138 | |
139 | |
140 /* Skip calls for modules loaded with special load flags */ | |
141 | |
142 if ( ( wm->flags & WINE_MODREF_DONT_RESOLVE_REFS ) | |
143 || ( wm->flags & WINE_MODREF_LOAD_AS_DATAFILE ) ) | |
144 return TRUE; | |
145 | |
146 | |
147 TRACE("(%s,%s,%p) - CALL\n", wm->modname, typeName[type], lpReserved ); | |
148 | |
149 /* Call the initialization routine */ | |
150 switch ( wm->type ) | |
151 { | |
152 case MODULE32_PE: | |
153 retv = PE_InitDLL( wm, type, lpReserved ); | |
154 break; | |
155 | |
156 case MODULE32_ELF: | |
157 /* no need to do that, dlopen() already does */ | |
158 break; | |
159 | |
160 default: | |
161 ERR("wine_modref type %d not handled.\n", wm->type ); | |
162 retv = FALSE; | |
163 break; | |
164 } | |
165 | |
166 /* The state of the module list may have changed due to the call | |
167 to PE_InitDLL. We cannot assume that this module has not been | |
168 deleted. */ | |
169 TRACE("(%p,%s,%p) - RETURN %d\n", wm, typeName[type], lpReserved, retv ); | |
170 | |
171 return retv; | |
172 } | |
173 | |
174 /************************************************************************* | |
175 * MODULE_DllProcessAttach | |
2069 | 176 * |
1 | 177 * Send the process attach notification to all DLLs the given module |
178 * depends on (recursively). This is somewhat complicated due to the fact that | |
179 * | |
180 * - we have to respect the module dependencies, i.e. modules implicitly | |
181 * referenced by another module have to be initialized before the module | |
182 * itself can be initialized | |
2069 | 183 * |
1 | 184 * - the initialization routine of a DLL can itself call LoadLibrary, |
185 * thereby introducing a whole new set of dependencies (even involving | |
186 * the 'old' modules) at any time during the whole process | |
187 * | |
188 * (Note that this routine can be recursively entered not only directly | |
189 * from itself, but also via LoadLibrary from one of the called initialization | |
190 * routines.) | |
191 * | |
192 * Furthermore, we need to rearrange the main WINE_MODREF list to allow | |
193 * the process *detach* notifications to be sent in the correct order. | |
2069 | 194 * This must not only take into account module dependencies, but also |
1 | 195 * 'hidden' dependencies created by modules calling LoadLibrary in their |
196 * attach notification routine. | |
197 * | |
198 * The strategy is rather simple: we move a WINE_MODREF to the head of the | |
199 * list after the attach notification has returned. This implies that the | |
200 * detach notifications are called in the reverse of the sequence the attach | |
201 * notifications *returned*. | |
202 * | |
203 * NOTE: Assumes that the process critical section is held! | |
204 * | |
205 */ | |
3465 | 206 static WIN_BOOL MODULE_DllProcessAttach( WINE_MODREF *wm, LPVOID lpReserved ) |
1 | 207 { |
208 WIN_BOOL retv = TRUE; | |
209 int i; | |
210 assert( wm ); | |
211 | |
212 /* prevent infinite recursion in case of cyclical dependencies */ | |
213 if ( ( wm->flags & WINE_MODREF_MARKER ) | |
214 || ( wm->flags & WINE_MODREF_PROCESS_ATTACHED ) ) | |
215 return retv; | |
216 | |
217 TRACE("(%s,%p) - START\n", wm->modname, lpReserved ); | |
218 | |
219 /* Tag current MODREF to prevent recursive loop */ | |
220 wm->flags |= WINE_MODREF_MARKER; | |
221 | |
222 /* Recursively attach all DLLs this one depends on */ | |
223 /* for ( i = 0; retv && i < wm->nDeps; i++ ) | |
224 if ( wm->deps[i] ) | |
225 retv = MODULE_DllProcessAttach( wm->deps[i], lpReserved ); | |
226 */ | |
227 /* Call DLL entry point */ | |
228 | |
229 //local_wm=wm; | |
230 if(local_wm) | |
231 { | |
7386 | 232 local_wm->next = (modref_list*) malloc(sizeof(modref_list)); |
1 | 233 local_wm->next->prev=local_wm; |
234 local_wm->next->next=NULL; | |
235 local_wm->next->wm=wm; | |
236 local_wm=local_wm->next; | |
237 } | |
238 else | |
239 { | |
7386 | 240 local_wm = (modref_list*)malloc(sizeof(modref_list)); |
1 | 241 local_wm->next=local_wm->prev=NULL; |
242 local_wm->wm=wm; | |
2069 | 243 } |
1 | 244 /* Remove recursion flag */ |
245 wm->flags &= ~WINE_MODREF_MARKER; | |
2069 | 246 |
1 | 247 if ( retv ) |
248 { | |
249 retv = MODULE_InitDll( wm, DLL_PROCESS_ATTACH, lpReserved ); | |
250 if ( retv ) | |
251 wm->flags |= WINE_MODREF_PROCESS_ATTACHED; | |
252 } | |
253 | |
254 | |
255 TRACE("(%s,%p) - END\n", wm->modname, lpReserved ); | |
256 | |
257 return retv; | |
258 } | |
259 | |
260 /************************************************************************* | |
261 * MODULE_DllProcessDetach | |
2069 | 262 * |
263 * Send DLL process detach notifications. See the comment about calling | |
1 | 264 * sequence at MODULE_DllProcessAttach. Unless the bForceDetach flag |
265 * is set, only DLLs with zero refcount are notified. | |
266 */ | |
3465 | 267 static void MODULE_DllProcessDetach( WINE_MODREF* wm, WIN_BOOL bForceDetach, LPVOID lpReserved ) |
1 | 268 { |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
269 // WINE_MODREF *wm=local_wm; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
270 modref_list* l = local_wm; |
1 | 271 wm->flags &= ~WINE_MODREF_PROCESS_ATTACHED; |
272 MODULE_InitDll( wm, DLL_PROCESS_DETACH, lpReserved ); | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
273 /* while (l) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
274 { |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
275 modref_list* f = l; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
276 l = l->next; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
277 free(f); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
278 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
279 local_wm = 0;*/ |
1 | 280 } |
281 | |
3465 | 282 /*********************************************************************** |
283 * MODULE_LoadLibraryExA (internal) | |
284 * | |
285 * Load a PE style module according to the load order. | |
286 * | |
287 * The HFILE parameter is not used and marked reserved in the SDK. I can | |
288 * only guess that it should force a file to be mapped, but I rather | |
289 * ignore the parameter because it would be extremely difficult to | |
290 * integrate this with different types of module represenations. | |
291 * | |
292 */ | |
293 static WINE_MODREF *MODULE_LoadLibraryExA( LPCSTR libname, HFILE hfile, DWORD flags ) | |
294 { | |
295 DWORD err = GetLastError(); | |
296 WINE_MODREF *pwm; | |
297 int i; | |
298 // module_loadorder_t *plo; | |
299 | |
300 SetLastError( ERROR_FILE_NOT_FOUND ); | |
301 TRACE("Trying native dll '%s'\n", libname); | |
302 pwm = PE_LoadLibraryExA(libname, flags); | |
303 #ifdef HAVE_LIBDL | |
304 if(!pwm) | |
305 { | |
306 TRACE("Trying ELF dll '%s'\n", libname); | |
307 pwm=(WINE_MODREF*)ELFDLL_LoadLibraryExA(libname, flags); | |
308 } | |
309 #endif | |
310 // printf("0x%08x\n", pwm); | |
311 // break; | |
312 if(pwm) | |
313 { | |
314 /* Initialize DLL just loaded */ | |
315 TRACE("Loaded module '%s' at 0x%08x, \n", libname, pwm->module); | |
316 /* Set the refCount here so that an attach failure will */ | |
317 /* decrement the dependencies through the MODULE_FreeLibrary call. */ | |
318 pwm->refCount++; | |
319 | |
320 SetLastError( err ); /* restore last error */ | |
321 return pwm; | |
322 } | |
323 | |
324 | |
325 WARN("Failed to load module '%s'; error=0x%08lx, \n", libname, GetLastError()); | |
326 return NULL; | |
327 } | |
328 | |
329 /*********************************************************************** | |
330 * MODULE_FreeLibrary | |
331 * | |
332 * NOTE: Assumes that the process critical section is held! | |
333 */ | |
334 static WIN_BOOL MODULE_FreeLibrary( WINE_MODREF *wm ) | |
335 { | |
336 TRACE("(%s) - START\n", wm->modname ); | |
337 | |
338 /* Recursively decrement reference counts */ | |
339 //MODULE_DecRefCount( wm ); | |
340 | |
341 /* Call process detach notifications */ | |
342 MODULE_DllProcessDetach( wm, FALSE, NULL ); | |
343 | |
344 PE_UnloadLibrary(wm); | |
345 | |
346 TRACE("END\n"); | |
347 | |
348 return TRUE; | |
349 } | |
1 | 350 |
351 /*********************************************************************** | |
352 * LoadLibraryExA (KERNEL32) | |
353 */ | |
354 HMODULE WINAPI LoadLibraryExA(LPCSTR libname, HANDLE hfile, DWORD flags) | |
355 { | |
2069 | 356 WINE_MODREF *wm = 0; |
357 char* listpath[] = { "", "", "/usr/lib/win32", "/usr/local/lib/win32", 0 }; | |
358 extern char* def_path; | |
359 char path[512]; | |
360 char checked[2000]; | |
361 int i = -1; | |
1 | 362 |
2069 | 363 checked[0] = 0; |
1 | 364 if(!libname) |
365 { | |
366 SetLastError(ERROR_INVALID_PARAMETER); | |
367 return 0; | |
368 } | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
369 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
370 wm=MODULE_FindModule(libname); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
371 if(wm) return wm->module; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
372 |
3465 | 373 // if(fs_installed==0) |
374 // install_fs(); | |
2069 | 375 |
376 while (wm == 0 && listpath[++i]) | |
377 { | |
378 if (i < 2) | |
379 { | |
380 if (i == 0) | |
381 /* check just original file name */ | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
382 strncpy(path, libname, 511); |
2069 | 383 else |
384 /* check default user path */ | |
385 strncpy(path, def_path, 300); | |
386 } | |
387 else if (strcmp(def_path, listpath[i])) | |
388 /* path from the list */ | |
389 strncpy(path, listpath[i], 300); | |
390 else | |
391 continue; | |
1 | 392 |
2069 | 393 if (i > 0) |
394 { | |
395 strcat(path, "/"); | |
396 strncat(path, libname, 100); | |
397 } | |
398 path[511] = 0; | |
399 wm = MODULE_LoadLibraryExA( path, hfile, flags ); | |
400 | |
401 if (!wm) | |
402 { | |
403 if (checked[0]) | |
404 strcat(checked, ", "); | |
405 strcat(checked, path); | |
406 checked[1500] = 0; | |
407 | |
408 } | |
409 } | |
1 | 410 if ( wm ) |
411 { | |
412 if ( !MODULE_DllProcessAttach( wm, NULL ) ) | |
413 { | |
414 WARN_(module)("Attach failed for module '%s', \n", libname); | |
415 MODULE_FreeLibrary(wm); | |
416 SetLastError(ERROR_DLL_INIT_FAILED); | |
417 MODULE_RemoveFromList(wm); | |
418 wm = NULL; | |
419 } | |
420 } | |
421 | |
2069 | 422 if (!wm) |
423 printf("Win32 LoadLibrary failed to load: %s\n", checked); | |
7386 | 424 |
13621
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
425 if (strstr(libname,"vp31vfw.dll") && wm) |
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
426 { |
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
427 int i; |
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
428 |
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
429 // sse hack moved from patch dll into runtime patching |
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
430 if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==(void*)0x10001000) { |
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
431 fprintf(stderr, "VP3 DLL found\n"); |
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
432 for (i=0;i<18;i++) ((char*)0x10004bd6)[i]=0x90; |
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
433 } |
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
434 } |
8c6b747eeacf
runtime patching vp31vfw.dll, so non-patched dlls can be used aswell. note: this does not breaks if the dll is already patched
alex
parents:
13182
diff
changeset
|
435 |
12042 | 436 // remove a few divs in the VP codecs that make trouble |
437 if (strstr(libname,"vp5vfw.dll") && wm) | |
438 { | |
439 int i; | |
440 if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==(void*)0x10003930) { | |
441 for (i=0;i<3;i++) ((char*)0x10004e86)[i]=0x90; | |
442 for (i=0;i<3;i++) ((char*)0x10005a23)[i]=0x90; | |
443 for (i=0;i<3;i++) ((char*)0x10005bff)[i]=0x90; | |
444 } else { | |
445 fprintf(stderr, "Unsupported VP5 version\n"); | |
446 return 0; | |
447 } | |
448 } | |
449 | |
450 if (strstr(libname,"vp6vfw.dll") && wm) | |
451 { | |
452 int i; | |
453 if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==(void*)0x10003ef0) { | |
454 // looks like VP 6.1.0.2 | |
455 for (i=0;i<6;i++) ((char*)0x10007268)[i]=0x90; | |
456 for (i=0;i<6;i++) ((char*)0x10007e83)[i]=0x90; | |
457 for (i=0;i<6;i++) ((char*)0x1000806a)[i]=0x90; | |
458 } else if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==(void*)0x10004120) { | |
459 // looks like VP 6.2.0.10 | |
460 for (i=0;i<6;i++) ((char*)0x10007688)[i]=0x90; | |
461 for (i=0;i<6;i++) ((char*)0x100082c3)[i]=0x90; | |
462 for (i=0;i<6;i++) ((char*)0x100084aa)[i]=0x90; | |
12422 | 463 } else if (PE_FindExportedFunction(wm, "DriverProc", TRUE)==(void*)0x10003e70) { |
464 // looks like VP 6.0.7.3 | |
465 for (i=0;i<6;i++) ((char*)0x10007559)[i]=0x90; | |
466 for (i=0;i<6;i++) ((char*)0x100081c3)[i]=0x90; | |
467 for (i=0;i<6;i++) ((char*)0x1000839e)[i]=0x90; | |
12042 | 468 } else { |
469 fprintf(stderr, "Unsupported VP6 version\n"); | |
470 return 0; | |
471 } | |
472 } | |
473 | |
13745
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
474 // Windows Media Video 9 Advanced |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
475 if (strstr(libname,"wmvadvd.dll") && wm) |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
476 { |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
477 // The codec calls IsRectEmpty with coords 0,0,0,0 => result is 0 |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
478 // but it really wants the rectangle to be not empty |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
479 if (PE_FindExportedFunction(wm, "CreateInstance", TRUE)==(void*)0x08c4b812) { |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
480 // Dll version is 10.0.0.3645 |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
481 *((char*)0x08c48b0f)=0xeb; // Jump always, ignoring IsRectEmpty result |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
482 } else { |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
483 fprintf(stderr, "Unsupported WMVA version\n"); |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
484 return 0; |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
485 } |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
486 } |
3db10035d297
Windows media video advanced profile (wmva) support via binary codec
rtognimp
parents:
13622
diff
changeset
|
487 |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
488 if (strstr(libname,"QuickTime.qts") && wm) |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
489 { |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
490 void** ptr; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
491 void *dispatch_addr; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
492 int i; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
493 |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
494 // dispatch_addr = GetProcAddress(wm->module, "theQuickTimeDispatcher", TRUE); |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
495 dispatch_addr = PE_FindExportedFunction(wm, "theQuickTimeDispatcher", TRUE); |
8451 | 496 if (dispatch_addr == (void *)0x62924c30) |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
497 { |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
498 fprintf(stderr, "QuickTime5 DLLs found\n"); |
8451 | 499 ptr = (void **)0x62b75ca4; // dispatch_ptr |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
500 for (i=0;i<5;i++) ((char*)0x6299e842)[i]=0x90; // make_new_region ? |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
501 for (i=0;i<28;i++) ((char*)0x6299e86d)[i]=0x90; // call__call_CreateCompatibleDC ? |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
502 for (i=0;i<5;i++) ((char*)0x6299e898)[i]=0x90; // jmp_to_call_loadbitmap ? |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
503 for (i=0;i<9;i++) ((char*)0x6299e8ac)[i]=0x90; // call__calls_OLE_shit ? |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
504 for (i=0;i<106;i++) ((char*)0x62a61b10)[i]=0x90; // disable threads |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
505 #if 0 |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
506 /* CreateThread callers */ |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
507 for (i=0;i<5;i++) ((char*)0x629487c5)[i]=0x90; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
508 for (i=0;i<5;i++) ((char*)0x6294b275)[i]=0x90; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
509 for (i=0;i<5;i++) ((char*)0x629a24b1)[i]=0x90; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
510 for (i=0;i<5;i++) ((char*)0x629afc5a)[i]=0x90; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
511 for (i=0;i<5;i++) ((char*)0x62af799c)[i]=0x90; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
512 for (i=0;i<5;i++) ((char*)0x62af7efe)[i]=0x90; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
513 for (i=0;i<5;i++) ((char*)0x62afa33e)[i]=0x90; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
514 #endif |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
515 |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
516 #if 0 |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
517 /* TerminateQTML fix */ |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
518 for (i=0;i<47;i++) ((char*)0x62afa3b8)[i]=0x90; // terminate thread |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
519 for (i=0;i<47;i++) ((char*)0x62af7f78)[i]=0x90; // terminate thread |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
520 for (i=0;i<77;i++) ((char*)0x629a13d5)[i]=0x90; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
521 ((char *)0x6288e0ae)[0] = 0xc3; // font/dc remover |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
522 for (i=0;i<24;i++) ((char*)0x6287a1ad)[i]=0x90; // destroy window |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
523 #endif |
8451 | 524 } else if (dispatch_addr == (void *)0x6693b330) |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
525 { |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
526 fprintf(stderr, "QuickTime6 DLLs found\n"); |
8451 | 527 ptr = (void **)0x66bb9524; // dispatcher_ptr |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
528 for (i=0;i<5;i++) ((char *)0x66a730cc)[i]=0x90; // make_new_region |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
529 for (i=0;i<28;i++) ((char *)0x66a730f7)[i]=0x90; // call__call_CreateCompatibleDC |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
530 for (i=0;i<5;i++) ((char *)0x66a73122)[i]=0x90; // jmp_to_call_loadbitmap |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
531 for (i=0;i<9;i++) ((char *)0x66a73131)[i]=0x90; // call__calls_OLE_shit |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
532 for (i=0;i<96;i++) ((char *)0x66aac852)[i]=0x90; // disable threads |
10795
2ab9ab4f07b4
Support for QuickTime6.3 DLLs. Patch by Dima K. <dimakar@yahoo.com>
mosu
parents:
8451
diff
changeset
|
533 } else if (dispatch_addr == (void *)0x6693c3e0) |
2ab9ab4f07b4
Support for QuickTime6.3 DLLs. Patch by Dima K. <dimakar@yahoo.com>
mosu
parents:
8451
diff
changeset
|
534 { |
2ab9ab4f07b4
Support for QuickTime6.3 DLLs. Patch by Dima K. <dimakar@yahoo.com>
mosu
parents:
8451
diff
changeset
|
535 fprintf(stderr, "QuickTime6.3 DLLs found\n"); |
2ab9ab4f07b4
Support for QuickTime6.3 DLLs. Patch by Dima K. <dimakar@yahoo.com>
mosu
parents:
8451
diff
changeset
|
536 ptr = (void **)0x66bca01c; // dispatcher_ptr |
2ab9ab4f07b4
Support for QuickTime6.3 DLLs. Patch by Dima K. <dimakar@yahoo.com>
mosu
parents:
8451
diff
changeset
|
537 for (i=0;i<5;i++) ((char *)0x66a68f6c)[i]=0x90; // make_new_region |
2ab9ab4f07b4
Support for QuickTime6.3 DLLs. Patch by Dima K. <dimakar@yahoo.com>
mosu
parents:
8451
diff
changeset
|
538 for (i=0;i<28;i++) ((char *)0x66a68f97)[i]=0x90; // call__call_CreateCompatibleDC |
2ab9ab4f07b4
Support for QuickTime6.3 DLLs. Patch by Dima K. <dimakar@yahoo.com>
mosu
parents:
8451
diff
changeset
|
539 for (i=0;i<5;i++) ((char *)0x66a68fc2)[i]=0x90; // jmp_to_call_loadbitmap |
2ab9ab4f07b4
Support for QuickTime6.3 DLLs. Patch by Dima K. <dimakar@yahoo.com>
mosu
parents:
8451
diff
changeset
|
540 for (i=0;i<9;i++) ((char *)0x66a68fd1)[i]=0x90; // call__calls_OLE_shit |
2ab9ab4f07b4
Support for QuickTime6.3 DLLs. Patch by Dima K. <dimakar@yahoo.com>
mosu
parents:
8451
diff
changeset
|
541 for (i=0;i<96;i++) ((char *)0x66ab4722)[i]=0x90; // disable threads |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
542 } else |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
543 { |
8451 | 544 fprintf(stderr, "Unsupported QuickTime version (%p)\n", |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
545 dispatch_addr); |
8451 | 546 return 0; |
8318
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
547 } |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
548 |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
549 fprintf(stderr,"QuickTime.qts patched!!! old entry=%p\n",ptr[0]); |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
550 |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
551 #ifdef EMU_QTX_API |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
552 report_entry = report_func; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
553 report_ret = report_func_ret; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
554 wrapper_target=ptr[0]; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
555 ptr[0]=wrapper; |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
556 #endif |
1ed329d61051
both qt5 and qt6 patching support (qt6 addresses found by arpi)
alex
parents:
8286
diff
changeset
|
557 } |
2069 | 558 |
1 | 559 return wm ? wm->module : 0; |
560 } | |
561 | |
562 | |
563 /*********************************************************************** | |
564 * LoadLibraryA (KERNEL32) | |
565 */ | |
566 HMODULE WINAPI LoadLibraryA(LPCSTR libname) { | |
567 return LoadLibraryExA(libname,0,0); | |
568 } | |
569 | |
570 /*********************************************************************** | |
571 * FreeLibrary | |
572 */ | |
573 WIN_BOOL WINAPI FreeLibrary(HINSTANCE hLibModule) | |
574 { | |
575 WIN_BOOL retv = FALSE; | |
576 WINE_MODREF *wm; | |
577 | |
578 wm=MODULE32_LookupHMODULE(hLibModule); | |
579 | |
580 if ( !wm || !hLibModule ) | |
581 { | |
582 SetLastError( ERROR_INVALID_HANDLE ); | |
583 return 0; | |
2069 | 584 } |
1 | 585 else |
586 retv = MODULE_FreeLibrary( wm ); | |
2069 | 587 |
1 | 588 MODULE_RemoveFromList(wm); |
589 | |
128 | 590 /* garbage... */ |
591 if (local_wm == NULL) my_garbagecollection(); | |
592 | |
1 | 593 return retv; |
594 } | |
595 | |
596 /*********************************************************************** | |
597 * MODULE_DecRefCount | |
598 * | |
599 * NOTE: Assumes that the process critical section is held! | |
600 */ | |
601 static void MODULE_DecRefCount( WINE_MODREF *wm ) | |
602 { | |
603 int i; | |
604 | |
605 if ( wm->flags & WINE_MODREF_MARKER ) | |
606 return; | |
607 | |
608 if ( wm->refCount <= 0 ) | |
609 return; | |
610 | |
611 --wm->refCount; | |
612 TRACE("(%s) refCount: %d\n", wm->modname, wm->refCount ); | |
613 | |
614 if ( wm->refCount == 0 ) | |
615 { | |
616 wm->flags |= WINE_MODREF_MARKER; | |
617 | |
618 for ( i = 0; i < wm->nDeps; i++ ) | |
619 if ( wm->deps[i] ) | |
620 MODULE_DecRefCount( wm->deps[i] ); | |
621 | |
622 wm->flags &= ~WINE_MODREF_MARKER; | |
623 } | |
624 } | |
625 | |
626 /*********************************************************************** | |
627 * GetProcAddress (KERNEL32.257) | |
628 */ | |
629 FARPROC WINAPI GetProcAddress( HMODULE hModule, LPCSTR function ) | |
630 { | |
631 return MODULE_GetProcAddress( hModule, function, TRUE ); | |
632 } | |
633 | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
634 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
635 |
13622 | 636 /* |
637 http://lists.apple.com/archives/quicktime-api/2003/Jan/msg00278.html | |
638 */ | |
639 | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
640 struct ComponentParameters { |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
641 unsigned char flags; /* call modifiers: sync/async, deferred, immed, etc */ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
642 unsigned char paramSize; /* size in bytes of actual parameters passed to this call */ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
643 short what; /* routine selector, negative for Component management calls */ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
644 long params[1]; /* actual parameters for the indicated routine */ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
645 }; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
646 typedef struct ComponentParameters ComponentParameters; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
647 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
648 static char* component_func(int what){ |
13622 | 649 if (what < 0) // Range 0: Standard Component Calls |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
650 switch(what){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
651 case -1: return "kComponentOpenSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
652 case -2: return "kComponentCloseSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
653 case -3: return "kComponentCanDoSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
654 case -4: return "kComponentVersionSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
655 case -5: return "kComponentRegisterSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
656 case -6: return "kComponentTargetSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
657 case -7: return "kComponentUnregisterSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
658 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
659 |
13622 | 660 if (what >= 0 && what <= 0xff) // Range 1: Generic codecs |
661 switch(what & 0xff){ | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
662 case 0: return "kImageCodecGetCodecInfoSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
663 case 1: return "kImageCodecGetCompressionTimeSelect"; |
13622 | 664 case 2: return "kImageCodecGetMaxCompressionSizeSelect"; |
665 case 3: return "kImageCodecPreCompressSelect"; | |
666 case 4: return "kImageCodecBandCompressSelect"; | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
667 case 5: return "kImageCodecPreDecompressSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
668 case 6: return "kImageCodecBandDecompressSelect"; |
13622 | 669 case 7: return "kImageCodecBusySelect"; |
670 // finish this list from the above URL | |
671 case 0x10: return "kImageCodecIsImageDescriptionEquivalentSelect"; | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
672 case 0x12: return "kImageCodecDisposeMemorySelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
673 case 0x14: return "kImageCodecNewImageBufferMemorySelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
674 case 0x28: return "kImageCodecRequestGammaLevelSelect"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
675 } |
13622 | 676 |
677 //if (what >= 0x100 && what <= 0x1ff) // Range 2: Specific to QT Photo JPEG codecs | |
678 | |
679 if (what >= 0x200 && what <= 0x2ff) // Range 3: Base Decompressor | |
680 switch(what & 0xff){ | |
681 case 0: return "Preflight"; | |
682 case 1: return "Initialize"; | |
683 case 2: return "BeginBand"; | |
684 case 3: return "DrawBand"; | |
685 case 4: return "EndBand"; | |
686 case 5: return "QueueStarting"; | |
687 case 6: return "QueueStopping"; | |
688 } | |
689 | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
690 return "???"; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
691 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
692 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
693 static int c_level=0; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
694 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
695 static int dump_component(char* name,int type,void* _orig, ComponentParameters *params,void** glob){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
696 int ( *orig)(ComponentParameters *params, void** glob) = _orig; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
697 int ret,i; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
698 |
13622 | 699 fprintf(stderr,"%*sComponentCall: %s flags=0x%X size=%d what=0x%X %s\n",3*c_level,"",name,params->flags, params->paramSize, params->what, component_func(params->what)); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
700 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
701 for(i=0;i<params->paramSize/4;i++) |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
702 fprintf(stderr,"%*s param[%d] = 0x%X\n",3*c_level,"",i,params->params[i]); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
703 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
704 ++c_level; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
705 ret=orig(params,glob); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
706 --c_level; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
707 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
708 if(ret>=0x1000) |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
709 fprintf(stderr,"%*s return=0x%X\n",3*c_level,"",ret); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
710 else |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
711 fprintf(stderr,"%*s return=%d\n",3*c_level,"",ret); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
712 return ret; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
713 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
714 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
715 #define DECL_COMPONENT(sname,name,type) \ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
716 static void* real_ ## sname = NULL; \ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
717 static int fake_ ## sname(ComponentParameters *params,void** glob){ \ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
718 return dump_component(name,type,real_ ## sname, params, glob); \ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
719 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
720 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
721 #include "qt_comp.h" |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
722 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
723 #undef DECL_COMPONENT |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
724 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
725 #include "qt_fv.h" |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
726 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
727 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
728 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
729 #ifdef EMU_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
730 |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
731 static uint32_t ret_array[4096]; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
732 static int ret_i=0; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
733 |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
734 static int report_func(void *stack_base, int stack_size, reg386_t *reg, uint32_t *flags) |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
735 { |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
736 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
737 int i; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
738 int* dptr; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
739 void* pwrapper=NULL; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
740 void* pptr=NULL; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
741 char* pname=NULL; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
742 int plen=-1; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
743 // find the code: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
744 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
745 dptr=0x62b67ae0;dptr+=2*((reg->eax>>16)&255); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
746 // printf("FUNC: flag=%d ptr=%p\n",dptr[0],dptr[1]); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
747 if(dptr[0]&255){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
748 dptr=dptr[1];dptr+=4*(reg->eax&65535); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
749 // printf("FUNC: ptr2=%p eax=%p edx=%p\n",dptr[1],dptr[0],dptr[2]); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
750 pwrapper=dptr[1]; pptr=dptr[0]; plen=dptr[2]; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
751 } else { |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
752 pwrapper=0x62924910; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
753 switch(dptr[1]){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
754 case 0x629248d0: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
755 dptr=0x62b672c0;dptr+=2*(reg->eax&65535); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
756 // printf("FUNC: ptr2=%p eax=%p edx=%p\n",0x62924910,dptr[0],dptr[1]); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
757 pptr=dptr[0]; plen=dptr[1]; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
758 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
759 case 0x62924e40: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
760 dptr=0x62b67c70;dptr+=2*(reg->eax&65535); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
761 // printf("FUNC: ptr2=%p eax=%p edx=%p\n",0x62924910,dptr[0],dptr[1]); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
762 pptr=dptr[0]; plen=dptr[1]; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
763 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
764 case 0x62924e60: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
765 dptr=0x62b68108;if(reg->eax&0x8000) dptr+=2*(reg->eax|0xffff0000); else dptr+=2*(reg->eax&65535); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
766 // printf("FUNC: ptr2=%p eax=%p edx=%p\n",0x62924910,dptr[0],dptr[1]); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
767 pptr=dptr[0]; plen=dptr[1]; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
768 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
769 case 0x62924e80: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
770 dptr=0x62b68108;if(reg->eax&0x8000) dptr+=2*(reg->eax|0xffff0000); else dptr+=2*(reg->eax&65535); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
771 // printf("FUNC: ptr2=%p eax=%p edx=%p\n",0x62924910,dptr[0],dptr[1]); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
772 pptr=dptr[0]; plen=dptr[1]; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
773 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
774 default: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
775 printf("FUNC: unknown ptr & psize!\n"); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
776 pwrapper=dptr[1]; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
777 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
778 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
779 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
780 for(i=0;qt_fv_list[i].name;i++){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
781 if(qt_fv_list[i].id==reg->eax){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
782 pname=qt_fv_list[i].name; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
783 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
784 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
785 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
786 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
787 printf("FUNC[%X/%s]: wrapper=%p func=%p len=%d\n",reg->eax, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
788 pname?pname:"???",pwrapper,pptr,plen); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
789 |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
790 printf("FUNC: caller=%p ebx=%p\n",((uint32_t *)stack_base)[0],reg->ebx); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
791 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
792 if(pname) |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
793 printf("%*sENTER(%d): %s(",ret_i*2,"",ret_i,pname); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
794 else |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
795 printf("%*sENTER(%d): %X(",ret_i*2,"",ret_i,reg->eax); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
796 for (i=0;i<plen/4;i++){ |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
797 unsigned int val=((uint32_t *)stack_base)[1+i]; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
798 unsigned char* fcc=&val; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
799 printf("%s0x%X", i?", ":"",val); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
800 if(fcc[0]>=0x20 && fcc[0]<128 && |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
801 fcc[1]>=0x20 && fcc[1]<128 && |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
802 fcc[2]>=0x20 && fcc[2]<128 && |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
803 fcc[3]>=0x20 && fcc[3]<128) printf("='%c%c%c%c'",fcc[3],fcc[2],fcc[1],fcc[0]); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
804 else if(val>=8 && val<65536) printf("=%d",val); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
805 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
806 printf(")\n"); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
807 fflush(stdout); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
808 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
809 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
810 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
811 #if 1 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
812 // emulate some functions: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
813 switch(reg->eax){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
814 // memory management: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
815 case 0x150011: //NewPtrClear |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
816 case 0x150012: //NewPtrSysClear |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
817 reg->eax=(uint32_t)malloc(((uint32_t *)stack_base)[1]); |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
818 memset((void *)reg->eax,0,((uint32_t *)stack_base)[1]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
819 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
820 printf("%*sLEAVE(%d): EMULATED! 0x%X\n",ret_i*2,"",ret_i, reg->eax); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
821 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
822 return 1; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
823 case 0x15000F: //NewPtr |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
824 case 0x150010: //NewPtrSys |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
825 reg->eax=(uint32_t)malloc(((uint32_t *)stack_base)[1]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
826 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
827 printf("%*sLEAVE(%d): EMULATED! 0x%X\n",ret_i*2,"",ret_i, reg->eax); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
828 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
829 return 1; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
830 case 0x15002f: //DisposePtr |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
831 if(((uint32_t *)stack_base)[1]>=0x60000000) |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
832 printf("WARNING! Invalid Ptr handle!\n"); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
833 else |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
834 free((void *)((uint32_t *)stack_base)[1]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
835 reg->eax=0; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
836 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
837 printf("%*sLEAVE(%d): EMULATED! 0x%X\n",ret_i*2,"",ret_i, reg->eax); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
838 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
839 return 1; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
840 // mutexes: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
841 case 0x1d0033: //QTMLCreateMutex |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
842 reg->eax=0xdeadbabe; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
843 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
844 printf("%*sLEAVE(%d): EMULATED! 0x%X\n",ret_i*2,"",ret_i, reg->eax); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
845 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
846 return 1; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
847 case 0x1d0034: //QTMLDestroyMutex |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
848 case 0x1d0035: //QTMLGrabMutex |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
849 case 0x1d0036: //QTMLReturnMutex |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
850 case 0x1d003d: //QTMLTryGrabMutex |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
851 reg->eax=0; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
852 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
853 printf("%*sLEAVE(%d): EMULATED! 0x%X\n",ret_i*2,"",ret_i, reg->eax); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
854 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
855 return 1; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
856 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
857 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
858 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
859 #if 0 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
860 switch(reg->eax){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
861 // case 0x00010000: |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
862 // printf("FUNC: ImageCodecInitialize/ImageCodecGetCodecInfo(ci=%p,&icap=%p)\n",((uint32_t *)stack_base)[1],((uint32_t *)stack_base)[4]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
863 // break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
864 case 0x00010003: |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
865 printf("FUNC: CountComponents(&desc=%p)\n",((uint32_t *)stack_base)[1]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
866 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
867 case 0x00010004: |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
868 printf("FUNC: FindNextComponent(prev=%p,&desc=%p)\n",((uint32_t *)stack_base)[1],((uint32_t *)stack_base)[2]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
869 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
870 case 0x00010007: |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
871 printf("FUNC: OpenComponent(prev=%p)\n",((uint32_t *)stack_base)[1]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
872 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
873 case 0x0003008b: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
874 printf("FUNC: QTNewGWorldFromPtr(&pts=%p,fourcc=%.4s,&rect=%p,x1=%p,x2=%p,x3=%p,plane=%p,stride=%d)\n", |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
875 ((uint32_t *)stack_base)[1], |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
876 &(((uint32_t *)stack_base)[2]), |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
877 ((uint32_t *)stack_base)[3], |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
878 ((uint32_t *)stack_base)[4], |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
879 ((uint32_t *)stack_base)[5], |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
880 ((uint32_t *)stack_base)[6], |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
881 ((uint32_t *)stack_base)[7], |
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
882 ((uint32_t *)stack_base)[8]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
883 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
884 case 0x001c0018: |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
885 printf("FUNC: GetGWorldPixMap(gworld=%p)\n",((uint32_t *)stack_base)[1]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
886 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
887 case 0x00110001: |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
888 printf("FUNC: Gestalt(fourcc=%.4s, &ret=%p)\n",&(((uint32_t *)stack_base)[1]),((uint32_t *)stack_base)[2]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
889 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
890 default: { |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
891 int i; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
892 for(i=0;qt_fv_list[i].name;i++){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
893 if(qt_fv_list[i].id==reg->eax){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
894 printf("FUNC: %s\n",qt_fv_list[i].name); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
895 break; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
896 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
897 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
898 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
899 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
900 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
901 // print stack/reg information |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
902 printf("ENTER(%d) stack = %d bytes @ %p\n" |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
903 "eax = 0x%08x edx = 0x%08x ebx = 0x%08x ecx = 0x%08x\n" |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
904 "esp = 0x%08x ebp = 0x%08x esi = 0x%08x edi = 0x%08x\n" |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
905 "flags = 0x%08x\n", ret_i, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
906 stack_size, stack_base, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
907 reg->eax, reg->edx, reg->ebx, reg->ecx, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
908 reg->esp, reg->ebp, reg->esi, reg->edi, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
909 *flags); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
910 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
911 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
912 // save ret addr: |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
913 ret_array[ret_i]=((uint32_t *)stack_base)[0]; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
914 ++ret_i; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
915 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
916 #if 0 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
917 // print first 7 longs in the stack (return address, arg[1], arg[2] ... ) |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
918 printf("stack[] = { "); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
919 for (i=0;i<7;i++) { |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
920 printf("%08x ", ((uint32_t *)stack_base)[i]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
921 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
922 printf("}\n\n"); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
923 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
924 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
925 // // mess with function parameters |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
926 // ((uint32_t *)stack_base)[1] = 0x66554433; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
927 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
928 // // mess with return address... |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
929 // reg->eax = 0x11223344; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
930 return 0; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
931 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
932 |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
933 static int report_func_ret(void *stack_base, int stack_size, reg386_t *reg, uint32_t *flags) |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
934 { |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
935 int i; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
936 short err; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
937 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
938 // restore ret addr: |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
939 --ret_i; |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
940 ((uint32_t *)stack_base)[0]=ret_array[ret_i]; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
941 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
942 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
943 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
944 #if 1 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
945 printf("%*sLEAVE(%d): 0x%X",ret_i*2,"",ret_i, reg->eax); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
946 err=reg->eax; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
947 if(err && (reg->eax>>16)==0) printf(" = %d",err); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
948 printf("\n"); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
949 fflush(stdout); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
950 #else |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
951 // print stack/reg information |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
952 printf("LEAVE(%d) stack = %d bytes @ %p\n" |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
953 "eax = 0x%08x edx = 0x%08x ebx = 0x%08x ecx = 0x%08x\n" |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
954 "esp = 0x%08x ebp = 0x%08x esi = 0x%08x edi = 0x%08x\n" |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
955 "flags = 0x%08x\n", ret_i, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
956 stack_size, stack_base, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
957 reg->eax, reg->edx, reg->ebx, reg->ecx, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
958 reg->esp, reg->ebp, reg->esi, reg->edi, |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
959 *flags); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
960 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
961 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
962 #if 0 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
963 // print first 7 longs in the stack (return address, arg[1], arg[2] ... ) |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
964 printf("stack[] = { "); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
965 for (i=0;i<7;i++) { |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
966 printf("%08x ", ((uint32_t *)stack_base)[i]); |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
967 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
968 printf("}\n\n"); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
969 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
970 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
971 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
972 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
973 // // mess with function parameters |
11868
711e584107af
switch to inttypes.h (u_int32_t vs uint32_t) in favour of Solaris9/x86 support
alex
parents:
10795
diff
changeset
|
974 // ((uint32_t *)stack_base)[1] = 0x66554433; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
975 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
976 // // mess with return address... |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
977 // reg->eax = 0x11223344; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
978 return 0; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
979 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
980 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
981 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
982 |
1 | 983 /*********************************************************************** |
984 * MODULE_GetProcAddress (internal) | |
985 */ | |
2069 | 986 FARPROC MODULE_GetProcAddress( |
1 | 987 HMODULE hModule, /* [in] current module handle */ |
988 LPCSTR function, /* [in] function to be looked up */ | |
989 WIN_BOOL snoop ) | |
990 { | |
991 WINE_MODREF *wm = MODULE32_LookupHMODULE( hModule ); | |
2069 | 992 // WINE_MODREF *wm=local_wm; |
1 | 993 FARPROC retproc; |
994 | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
995 #ifdef DEBUG_QTX_API |
1 | 996 if (HIWORD(function)) |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
997 fprintf(stderr,"XXX GetProcAddress(%08lx,%s)\n",(DWORD)hModule,function); |
1 | 998 else |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
999 fprintf(stderr,"XXX GetProcAddress(%08lx,%p)\n",(DWORD)hModule,function); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1000 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1001 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1002 // TRACE_(win32)("(%08lx,%s)\n",(DWORD)hModule,function); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1003 // else |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1004 // TRACE_(win32)("(%08lx,%p)\n",(DWORD)hModule,function); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1005 |
1 | 1006 if (!wm) { |
1007 SetLastError(ERROR_INVALID_HANDLE); | |
1008 return (FARPROC)0; | |
1009 } | |
1010 switch (wm->type) | |
1011 { | |
1012 case MODULE32_PE: | |
1013 retproc = PE_FindExportedFunction( wm, function, snoop ); | |
1014 if (!retproc) SetLastError(ERROR_PROC_NOT_FOUND); | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1015 break; |
2069 | 1016 #ifdef HAVE_LIBDL |
1 | 1017 case MODULE32_ELF: |
2069 | 1018 retproc = (FARPROC) dlsym( (void*) wm->module, function); |
1 | 1019 if (!retproc) SetLastError(ERROR_PROC_NOT_FOUND); |
1020 return retproc; | |
1021 #endif | |
1022 default: | |
1023 ERR("wine_modref type %d not handled.\n",wm->type); | |
1024 SetLastError(ERROR_INVALID_HANDLE); | |
1025 return (FARPROC)0; | |
1026 } | |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1027 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1028 #ifdef EMU_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1029 if (HIWORD(function) && retproc){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1030 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1031 #ifdef DEBUG_QTX_API |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1032 #define DECL_COMPONENT(sname,name,type) \ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1033 if(!strcmp(function,name)){ \ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1034 fprintf(stderr,name "dispatcher catched -> %p\n",retproc); \ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1035 real_ ## sname = retproc; retproc = fake_ ## sname; \ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1036 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1037 #include "qt_comp.h" |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1038 #undef DECL_COMPONENT |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1039 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1040 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1041 if(!strcmp(function,"theQuickTimeDispatcher") |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1042 // || !strcmp(function,"_CallComponentFunctionWithStorage") |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1043 // || !strcmp(function,"_CallComponent") |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1044 ){ |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1045 fprintf(stderr,"theQuickTimeDispatcher catched -> %p\n",retproc); |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1046 report_entry = report_func; |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1047 report_ret = report_func_ret; |
13182 | 1048 wrapper_target=(void(*)(void))retproc; |
8451 | 1049 retproc=(FARPROC)wrapper; |
8269
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1050 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1051 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1052 } |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1053 #endif |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1054 |
8b905703a450
- qtx (quicktime's macos emulation layer) debugging/emulation environment :)
arpi
parents:
7386
diff
changeset
|
1055 return retproc; |
1 | 1056 } |
1057 | |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1058 static int acounter = 0; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1059 void CodecAlloc(void) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1060 { |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1061 acounter++; |
3465 | 1062 //printf("**************CODEC ALLOC %d\n", acounter); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1063 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1064 |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1065 void CodecRelease(void) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1066 { |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1067 acounter--; |
3465 | 1068 //printf("**************CODEC RELEASE %d\n", acounter); |
2651
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1069 if (acounter == 0) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1070 { |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1071 for (;;) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1072 { |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1073 modref_list* list = local_wm; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1074 if (!local_wm) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1075 break; |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1076 //printf("CODECRELEASE %p\n", list); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1077 MODULE_FreeLibrary(list->wm); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1078 MODULE_RemoveFromList(list->wm); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1079 if (local_wm == NULL) |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1080 my_garbagecollection(); |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1081 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1082 } |
958d10763c34
partially synced with avifile... (TODO: migrate to new registry.c and driver.c)
arpi
parents:
2069
diff
changeset
|
1083 } |