Я бы хотел использовать PatchAPI для Windows API , чтобы применить некоторые исправления.
Применение исправлений реализовано в mspatcha.dll, который должен находиться в папке system32.
После прочтения в разных местах, таких как их ссылки и поиск в Google, мне еще предстоит найти правильный способ ссылки на эту DLL. Я хотел бы связать статически, работа с LoadLibrary кажется беспорядочной и что-то вроде поражения цели их заголовка patchapi.h. Так как я не нашел .lib-файл, на который я должен ссылаться, я создал свой собственный, используя следующие команды:
1) свалка / экспорт C: \ windows \ system32 \ mspatcha.dll
2) Создайте файл mspatcha.def, напишите строку «EXPORTS», а затем по одной строке для каждого имени функции, которое появляется в выводе dumpbin
3) lib /def:mspatcha.def /out:mspatcha.lib
Хотя я уверен, что это не правильный способ статически связываться с патчапи, я не нашел правильного способа сделать это.
В любом случае, после выполнения этих шагов и написания простого тестового примера, сделанного из одного вызова ApplyPatchToFileExA (), я все еще получаю ошибку компоновщика для символа _ApplyPatchToFileA @ 16.
Взглянув на экспортированные символы моего недавно созданного mspatcha.lib, выяснилось, что функции используют соглашение о неверном имени
D: \ tmp \ mspatcha> dumpbin / exports mspatcha.lib | find "ApplyPatchToFileExA"
_ApplyPatchToFileExA
Если я не ошибаюсь, это указывает на то, что lib экспортировала функции с использованием cdecl, тогда как dll использует stdcall (или, по крайней мере, объявляет функцию как _stdcall). См .: C украшением имени в Microsoft Windows .
Мои вопросы: как правильно использовать mspatcha.dll в моем приложении и что не так с моим процессом создания библиотеки из dll, чтобы я мог выполнять статическое связывание?
Подробный вывод моего терминала можно найти здесь: http://pastebin.com/q4FV4Se6