Если это функция __stdcall и , то они оставили название без изменений (оба большие if, но, конечно, возможно, тем не менее), имя будет иметь @nn
в конце, где nn
это число. Это число - число байтов, которые функция ожидает в качестве аргументов и удалит их из стека, прежде чем она вернется.
Итак, если это серьезная проблема, вы можете взглянуть на необработанное имя функции и проверить, что объем данных, которые вы помещаете в стек, соответствует количеству данных, которые он собирается очистить из стека.
Обратите внимание, что это все еще только защита от Мерфи, а не Макиавелли. Когда вы создаете DLL, вы можете использовать файл экспорта для изменения имен функций. Это часто используется для удаления искажения имени - но я уверен, что это также позволит вам переименовать функцию с xxx @ 12 на xxx @ 16 (или что-то еще), чтобы ввести читателя в заблуждение относительно ожидаемых параметров.
Редактировать: (в основном в ответ на комментарий msalters): это правда, что вы не можете применить __stdcall к чему-то вроде функции-члена, но вы, безусловно, можете использовать его для таких вещей, как глобальные функции, независимо от того, написаны они на C или C ++.
Для таких вещей, как функции-члены, экспортированное имя функции будет искажено. В этом случае вы можете использовать UndecorateSymbolName
, чтобы получить полную подпись. Использовать это несколько нетривиально, но не слишком сложно.