===================================================================== AJPapps - LINK hack 2.00 Линда Кайе 2011-2019. Посвящается Ариэль ===================================================================== Эта утилита предназначена для Visual Basic 6 (возможно, и пятой версии). С её помощью можно немного повлиять на процесс компиляции ваших программ. Например, получить на выходе консольную утилиту или внедрить отладочную информацию прямо в файл программы. История создания ---------------- Честно говоря, нечто подобное я хотела очень давно, но как-то не додумывалась сделать всё именно так. А потом увидела статью на сайте vbAccelerator.com, и поняла, что могу сделать то же самое. Точнее, сначала я статью проигнорировала, а потом руки всё же дошли до собственной реализации. История изменений ----------------- • 1.00.0042 Первый публичный релиз. • 1.01.0147 [+] При запуске без параметров, программа выдаёт сообщение. [-] Программа не сообщала IDE об ошибках линковки. [+] В программе появилась возможность сжимать и подписывать файл после компиляции. [-] Убрана зависимость от AJPappsSupport0100.DLL. • 1.01.0148 [+] Появилась возможность генерации манифеста. См. раздел "Создание манифеста". • 1.01.0153 [+] Манифест теперь перезаписывается при каждой компиляции. [+] Появилась возможность создавать манифест, требующий для программы прав администратора в системах с UAC. • 2.00.0245 [26.08.2019] [+] Рефакторинг программы. [+] Появилась возможность генерировать MAP файл с дополнительной информацией. [+] Появилась возможность добавления комментария в скомпилированную программу. [+] Появилась возможность использования DEF файла при компиляции. [+] Появилась возможность задания собственного DOS STUB. [+] Появилась возможность запуска локальной версии BAT файла для подписи. [+] Появилась возможность запуска локальной версии BAT файла для сжатия. [+] Появилась возможность запуска локального BAT файла перед линковкой. [+] Появилась возможность запуска локального BAT файла после линковки. [+] В архив добавлены всякие примеры. [+] В архив добавлена оригинальная версия DOS STUB. [+] В архив добавлена изменённая версия DOS STUB. [+] Немного переделан лог, создающийся после компиляции. [+] Программа сообщает о неизвестных инструкциях в конфиге. [+] Добавлена поддержка комментариев в конфиге, чтобы какие-то инструкции можно было заблокировать, и программа не ругалась. [+] BAT файлы больше не запускаются с коротким именем файла. Зависимости ----------- Для работы этой программы нужны следующие компоненты: • Microsoft Visual Basic Virtual Machine Файл MSVBVM60.DLL Эти компоненты обязательны. Они уже включены в программу установки ^_^ Установка --------- ВНИМАНИЕ! Перед первой установкой обязательно сделайте бэкап файла LINK.EXE или сразу всей папки VB98! Устанавливать придётся вручную. 1. Для начала распакуйте архив с программой. 2. Найдите файл LinkHack.EXE и переименуйте его в Link.EXE. 3. Откройте папку с исполняемыми файлами Visual Basic. 4. Найдите и переименуйте файл Link.EXE в Link2.EXE. 5. Скопируйте файл Link.EXE из второго пункта в эту папку. ВНИМАНИЕ! Если программа уже устанавливалась, достаточно переписать Link.EXE, а вот Link2.EXE трогать не нужно! Не удалите случайно оригинальный линковщик! Использование ------------- Всё почти просто. Обычно компиляция программ происходит по следующей схеме: 1. Visual Basic компилирует модули. 2. Visual Basic вызывает Link.EXE для создания EXE (или DLL) файла. 3. Link.EXE вызывает Link2.EXE с переданными ему параметрами. 4. Link2.EXE создаёт EXE (или DLL) файл. Однако достаточно поместить в каталог, куда будет скомпилирована программа, файл с расширением LinkConfig с инструкциями, и схема компиляции немного изменится. В этом случае всё пройдёт по следующей схеме: 1. Visual Basic компилирует модули. 2. Visual Basic вызывает Link.EXE для создания EXE (или DLL) файла. 3. Link.EXE читает LinkConfig и модифицирует переданные параметры согласно инструкциям. 4. Link.EXE вызывает Link2.EXE с переданными ему параметрами. 5. Link2.EXE создаёт EXE (или DLL) файл. Имя файла с инструкциями должно совпадать с именем готового файла. Скажем, компилируемая программа называется Ariel.EXE, тогда файл должен называться Ariel.LinkConfig. После успешной компиляции, в каталоге с откомпилированным файлом появится файл с расширением LinkLog (в нашем случае Ariel.LinkLog), в котором можно посмотреть изменения в командной строке линковщика. Формат LinkConfig файла ----------------------- Формат файла с инструкциями очень прост. • Каждая инструкция находится на отдельной строке. • Регистр символов не имеет значения. • Пробелы и табы в начале и в конце каждой строки срезаются. • Инструкции, начинающиеся с "#" игнорируются. • Инструкции, начинающиеся с "x-" игнорируются. • Обо всех не опознанных инструкциях сообщается. Инструкции ---------- COFF - отладочная информация (если она создаётся при компиляции) будет помещена не в PDB файл, а в сам исполняемый файл. CONSOLE - откомпилированная программа будет консольной. Это избавит от необходимости вызова EDITBIN.EXE или SetSubsystem.EXE после компиляции. COMPRESS - сжимать откомпилированный файл (см. ниже). SIGN - подписывать откомпилированный файл (см. ниже). MANIFEST - добавлять манифест к откомпилированному файлу (см. ниже). NOMANIFEST - не добавлять манифест к откомпилированному файлу (см. ниже). ADMIN - указать в манифесте, что исполняемый файл требуется запускать с правами администратора (см. ниже). MAP - создавать MAP файл с информацией об откомпилированном файле. MAP_EXPORTS - добавлять в MAP файл дополнительную информацию. Наличие этой инструкции автоматически включает инструкцию "MAP". MAP_LINES - добавлять в MAP файл дополнительную информацию. Наличие этой инструкции автоматически включает инструкцию "MAP". MAP_FIXUPS - добавлять в MAP файл дополнительную информацию. Наличие этой инструкции автоматически включает инструкцию "MAP". COMMENT:comment - добавить в готовый файл текстовый комментарий. Сам комментарий указывается после двоеточия. Кавычки не срезаются. DEF - использовать DEF файл при компиляции (например, для указания экспортируемых функций). В нашем случае его имя должно быть Ariel.DEF, и он должен лежать в каталоге с откомпилированным файлом. Формат файла - стандартный. STUB:filename - добавить в откомпилированный файл собственный DOS STUB. Имя файла указывается после двоеточия. Кавычки срезаются. Сам файл должен быть маленьким, и должен быть откомпилирован для операционной системы MS DOS. Сжатие и подписание ------------------- Для сжатия готового файла и добавления в него цифровой подписи, программа использует два BAT файла, которые должны лежать в каталоге Visual Basic (там же, где LINK.EXE). • "LinkHack Compress.BAT" - этот файл содержит команды, выполняющиеся для сжатия файла. • "LinkHack Sign.BAT" - этот файл содержит команды, выполняющиеся для подписания файла цифровой подписью. Если какой-либо файл отсутствует, программа даже не попытается его запустить. При запуске, каждому файлу передаётся единственный параметр - полное имя самого откомпилированного файла. Внутри BAT файла оно может использоваться для вызова внешних программ и команд. Оба этих файла запускаются после завершения работы линковщика. • "LinkHack Compress.BAT" - этот файл запускается первым и только если указана инструкция COMPRESS. • "LinkHack Sign.BAT" - этот файл запускается вторым и только если НЕ указана инструкция NOSIGN. После запуска этих файлов, во временном каталоге появляются файлы "LinkHack Compress.TXT" и "LinkHack Sign.TXT" с полным их выводом. Если случится какая-то ошибка, программа предложит их открыть для просмотра. В комплекте с программой я приложила два своих BAT файла. Для примера. Локальные версии ---------------- Если для конкретного проекта требуется указать особые настройки сжатия или подписи, то это можно сделать через локальные BAT файлы, разместить которые необходимо в каталоге с откомпилированным файлом. Для файла Ariel.EXE их названия должны быть "Ariel.Compress.BAT" и "Ariel.Sign.BAT". При их наличии, соответствующие глобальные BAT файлы не выполняются. Выполнение происходит только при наличии соответствующей инструкции. Создание манифеста ------------------ Манифест - это файл, который используется системами вроде Windows XP и выше для получения дополнительных сведений о вашей программе. В частности его используют для того чтобы программа использовала темы при прорисовке интерфейса. Программа автоматически создаёт манифест, который содержит необходимый минимум для того чтобы система его приняла. Он не содержит описания программы версии и прочего - я так полагаю, на это есть пометка версии самой программы, к которой прилагается манифест. Вместо этого в генерируемом манифесте содержится только команда подключения Common Controls шестой версии - как раз то, что нужно, чтобы готовая программа не выглядела жутко. Имя файла манифеста для, скажем, файла Ariel.EXE выглядит так: Ariel.EXE.manifest. Вот по каким правилам создаётся манифест. 1. Если указана инструкция NOMANIFEST, то манифест никогда не создаётся. 2. Если указана инструкция MANIFEST, то манифест создаётся всегда. 3. Если же вышеуказанных команд не обнаружено, то манифест создаётся только для файлов с расширением EXE. ВНИМАНИЕ! Эта программа генерирует манифест при каждой компиляции. Если вы используете собственный манифест с какими-то хитрыми настройками или пихаете его в ресурсы, то создание манифеста следует отключить инструкцией NOMANIFEST. Также есть возможность указать через манифест, что готовую программу следует каждый раз запускать с правами администратора. Это работает в Windows Vista и выше при включенном UAC. Для этого укажите инструкцию ADMIN. Почитать про использование манифестов можно тут: http://support.microsoft.com/kb/309366 http://msdn.microsoft.com/en-us/library/bb756929.aspx http://www.vbaccelerator.com/home/vb/code/libraries/xp_visual_styles/using_xp_visual_styles_in_vb/article.asp Pre build и post build обработка -------------------------------- Существует возможность запуска специальных BAT файлов перед запуском линковщика и после его завершения, а так же завершения BAT файлов сжатия и подписи. Запуск происходит автоматически по факту их наличия в каталоге. Оба этих файла должны лежать в каталоге с откомпилированным файлом, и, для файла Ariel.EXE, должны называться, соответственно, "Ariel.PreBuild.BAT" и "Ariel.PostBuild.BAT". После запуска этих файлов, во временном каталоге появляются файлы "LinkHack PreBuild.TXT" и "LinkHack PostBuild.TXT" с полным их выводом. Если случится какая-то ошибка, программа предложит их открыть для просмотра. Из-за особенностей процесса компиляции в VB, во время запуска этих файлов, в каталоге с готовым файлом может находиться куча OBJ файлов, которые после завершения автоматически удаляются. Замечание по выполнению BAT файлов ---------------------------------- О неполадках при выполнении BAT файлов программа узнаёт по коду возврата Cmd.exe. Обычно, этот код - код возврата последней запущенной Cmd.exe команды или программы. Так же BAT файл может вернуть какой-то код при выходе командой EXIT. Например: > EXIT 69 Любой код возврата не равный нулю считается признаком ошибки. ВНИМАНИЕ! Поскольку программа один BAT файл воспринимает как один процесс, существует опасность перекрытия кодов возврата. Если во время выполнения какая-либо команда вернёт ошибку (код возврата будет не равен нулю), а следующая за ней выполнится успешно, то программа увидит только успешную операцию. Поэтому желательно самую критичную команду переместить в самый конец или осуществлять аварийный выход сразу же после неудачного выполнения очередной команды. Это уже особенности операционной системы. Удаление -------- Также ручками. 1. Откройте папку с исполняемыми файлами Visual Basic. 2. Удалите файл Link.EXE. 3. Переименуйте файл Link2.EXE в Link.EXE. Маленький копирайт ------------------ 1. Программа распространяется бесплатно. 2. Вы имеете право распространять её на тех же условиях. 3. При распространении вы не имеете права менять авторство программы, присваивать его себе или каким-либо иным способом искажать его. 4. Разрешено коммерческое использование программы (в офисе, на производстве) за исключением её платного распространения или сдачи в аренду. 5. Программа распространяется как есть. Автор не несёт ответственности за любые трагедии или несчастные случаи, вызванные использованием программы. 6. Вы имеете право использовать ActiveX компоненты, поставляемые с программой, в собственных программах. При этом автор не гарантирует совместимость будущих версий компонентов. 7. Для любого пункта данного соглашения может быть сделано исключение с разрешения автора программы. 8. По любым вопросам, связанным с данной программой, обращайтесь по адресу lindaoneesama@gmail.com Контакты -------- Почта: lindaoneesama@gmail.com Сайт: https://www.lindachan.net