X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fdllretrace.py;h=aa7ed45ada0ffbbd143f7e42b2340828dbaede0e;hb=HEAD;hp=4fd481ca967560d2226a4b15d5c2571e1cf749fb;hpb=cbe34810938b91291bc46a5de5535057b869f750;p=apitrace diff --git a/retrace/dllretrace.py b/retrace/dllretrace.py index 4fd481c..aa7ed45 100644 --- a/retrace/dllretrace.py +++ b/retrace/dllretrace.py @@ -26,17 +26,18 @@ from retrace import Retracer from dispatch import Dispatcher +from specs.stdapi import API class DllDispatcher(Dispatcher): - def dispatchApi(self, api): - tag = api.name.upper() + def dispatchModule(self, module): + tag = module.name.upper() print r'const char *g_sz%sDllName = NULL;' % (tag,) print r'HMODULE g_h%sModule = NULL;' % (tag,) print r'' print r'static PROC' - print r'_getPublicProcAddress(LPCSTR lpProcName) {' + print r'_get%sProcAddress(LPCSTR lpProcName) {' % tag print r' if (!g_h%sModule) {' % tag print r' if (g_sz%sDllName) {' % tag print r' g_h%sModule = LoadLibraryA(g_sz%sDllName);' % (tag, tag) @@ -45,10 +46,10 @@ class DllDispatcher(Dispatcher): print r' }' print r' }' print r' if (!g_h%sModule) {' % tag - print r' g_h%sModule = LoadLibraryA("%s.dll");' % (tag, api.name) + print r' g_h%sModule = LoadLibraryA("%s.dll");' % (tag, module.name) print r' }' print r' if (!g_h%sModule) {' % tag - print r' os::log("error: failed to load %s.dll\n");' % api.name + print r' os::log("error: failed to load %s.dll\n");' % module.name print r' exit(1);' print r' }' print r' }' @@ -56,14 +57,18 @@ class DllDispatcher(Dispatcher): print r'}' print r'' - Dispatcher.dispatchApi(self, api) + Dispatcher.dispatchModule(self, module) + + def getProcAddressName(self, module, function): + assert self.isFunctionPublic(module, function) + return '_get%sProcAddress' % (module.name.upper()) class DllRetracer(Retracer): def retraceApi(self, api): - dispatcher = DllDispatcher() - dispatcher.dispatchApi(api) + for module in api.modules: + dispatcher = DllDispatcher() + dispatcher.dispatchModule(module) Retracer.retraceApi(self, api) -