Я хотел бы скрыть экспортированные символы из DLL для целей запутывания.
Это довольно аккуратно выполнимо при использовании файла определения модуля (.def
) выглядит примерно так;
EXPORTS
??0Foo@QAE@XZ @1 NONAME
??1Foo@QAE@XZ @2 NONAME
?Bar@Foo@UAEHXZ @3 NONAME
Проблема в том, что такое решение очень негибкое и требует ручной работы. Как вы можете видеть в моем примере, я экспортирую символы C ++, поэтому они в значительной степени декорированы моим компилятором.
Так что мой текущий рабочий процесс выглядит следующим образом;
Я должен сначала создать версию моей DLL, которая экспортирует все символы стандартным способом, используя __declspec(dllexport)
тогда мне нужно извлечь все экспортированные имена символов, используя dumpbin
или так. После того, как это сделано, мне нужно скопировать&вставьте символы в мой файл определения модуля и добавьте, что NONAME
директивы. Тогда я должен убедиться, что мои оригинальные источники не используют это __declspec(dllexport)
больше. После того, как все это будет сделано, мне нужно активировать этот файл .def в настройках проекта, а затем я наконец смогу создать бесплатную версию экспорта этой библиотеки DLL. Я думаю, много работы для этой довольно простой задачи.
Прежде чем рассказать обо всем этом, используя кучу скриптов и прочего, я подумал, что может быть, просто возможно есть решение, которое намного проще?
Обратите внимание, что я использую VisualStudio (2012) и, следовательно, отличный GCC pragma hidden
не буду делать, насколько я знаю.
Задача ещё не решена.
Других решений пока нет …