Типичное приложение, разработанное в Delphi, состоит из файлов разных типов, каждый из которых имеет своё расширение имени.
- .dpr. Файл проекта Delphi. Delphi создаёт файл проекта автоматически при первом сохранении нового приложения. Как правило, не возникает необходимости модифицировать файл проекта. Не следует удалять файл .dpr.
- .pas. Файлы модулей. Содержат исходный код программ на языке Delphi. Как правило, приложение Delphi имеет по одному файлу .pas для модуля каждой экранной формы, хотя можно включать в эти файлы собственный код, не связанный с экранными формами. Не следует удалять файл .pas.
- .dfm. Файлы описания формы. Содержат информацию о свойствах экранной формы и включённых в неё объектов, а также о событиях и процедурах их обработки. Не следует удалять файл .dfm.
- .dcu. Файлы, содержащие компилированный код, полученный на основе информации из соответствующих файлов .pas и .dfm.
- .res. Файл ресурсов. Содержит двоичные ресурсы (пиктограммы и прочие растровые изображения), используемые в проекте.
- .exe. Выполняемый файл, полученный на основе файлов .dcu в результате компоновки.
- .dof. Файл опций проекта. Содержит настройки проекта, модифицированные в диалоговом окне, которое открывается по команде Project/Options.
- .dll. Файлы библиотек. Содержат код для библиотеки динамической компоновки.
- .~*. Файлы-копии модифицированных и сохранённых файлов. Например, Main.~dp содержит предыдущую версию сохранения файла Main.dpr.
Структура файла проекта
Любая программа в Delphi состоит из файла проекта (.dpr) и одного или нескольких модулей (.pas). Файл проекта автоматически создаётся Delphi и предназначен для обработки компилятором. Для просмотра файла проекта используется пункт меню Project / View Source.
Поиска и удаление дублированных строк в Delphi (+ исходный код / исходник) | Delphi Видеоуроки
Delphi покажет окно кода с закладкой Project1, содержащее следующий текст: program Project1; uses Forms, Unit1 in ‘Unit1.pas’ ; begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end. Ключевое слово program со следующим за ним именем программы и точкой с запятой образуют заголовок программы.
За заголовком следует раздел описаний, в котором после ключевого слова uses указывается, что помимо файла проекта в программе должны использоваться модули Forms и Unit1. Модуль Forms является стандартным (то есть уже известным Delphi), а модуль Unit1 — новым, ранее не известным, поэтому Delphi указывает также имя файла с текстом модуля (in ‘Unit1.pas’) и имя связанного с модулем файла описания формы .
Строка — директива компилятора, указывающая на необходимость подключения к программе файла ресурсов. Тело программы начинается с ключевого слова begin и заканчивается ключевым словом end с точкой. Тело состоит из нескольких операторов языка Delphi. Каждый из них реализует обращение к одному из методов объекта Application.
В объекте Application собраны данные и подпрограммы, необходимые для нормального функционирования Windows-программы в целом. Delphi автоматически создаёт объект-программу Application для каждого нового проекта. С помощью метода Initialize программа осуществляет ряд вспомогательных действий, необходимых для работы под управлением операционной системы Windows.
Урок 3. Исходный код программы на Delphi 11
Метод CreateForm создаёт и показывает на экране окно главной формы. Метод Run реализует бесконечный цикл получения и обработки поступающих от Windows сообщений о действиях пользователя. Когда пользователь щёлкнет по кнопке Close, Windows передаст программе специальное сообщение, которое заставит программу прекратить работу и освободить назначенные ей системные ресурсы.
Структура модуля
Модули – это программные единицы, предназначенные для размещения программного кода. Реализуют поведенческую сторону приложения. Далее представлен исходный код модуля, который генерирует Delphi. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private < Private declarations >public < Public declarations >end; var Form1: TForm1; implementation end. Имя файла должно совпадать с именем модуля.
В интерфейсной части (начинается с ключевого слова interface) содержатся объявления всех глобальных объектов модуля (типов, констант, переменных и подпрограмм), которые должны стать доступными основной программе и/или другим модулям. В разделе uses указывается список подключенных модулей.
В разделе type описан класс TForm1, порождённый от стандартного класса TForm — базового класса Delphi, используемого для формирования программных объектов типа экранная форма. Членами класса могут быть как данные, так и методы их обработки. Некоторые члены класса могут иметь статус закрытых (private) или общедоступных (public).
Закрытые члены доступны только внутри модуля класса, а к общедоступным можно обращаться и из других модулей. В разделе var описана переменная Form1 как объект класса TForm1, для которого выделяется место в памяти. Исполняемая часть начинается с ключевого слова implementation.
Строка — директива компилятора, указывающая на необходимость подключения к программе файла описания формы с именем, совпадающим с именем модуля. Исполняемая часть содержит описания подпрограмм, объявленных в интерфейсной части. Детали реализации объявленных процедур, функций, классов скрыты в секции реализации и недоступны другим модулям.
Источник: studfile.net
Исходный код программы Lazy Tool 3.5 на Delphi
Представляю вам открытый исходный код уже заброшенного проекта программы для ВКонтакте под названием Lazy Tool. Программа была написана на языке программирования Delphi и ее исходный код был опубликован автором в официальной группе программы.
Для чего исходник Lazy Tool?
Если вы начинающий разработчик и учитесь программировать в Delphi или если вы продвинутый разработчик, который хочет продолжить проект, вы можете воспользоваться данным исходным кодом, предварительно установив специализированный пакет программ для программирования на Delphi.
Пара слов об исходнике:
Программа была написана на Delphi XE. В ней вместо общепринятого API ВКонтакте используются другие, уже нерабочие методы для авторизации, получения аудиозаписей и прочего. В случае, если вы хотите использовать данные исходники в целях написания нечто подобного, придется похлопотать и переписать несколько функций.
В архиве присутствует файл скина для программы, написанный ее автором и использованный при ее создании. Для подключения скина вам потребуется установить специальный пакет под названием AlphaControl. Он представляет из себя новый набор компонентов, аналогичных стандартным (кнопкам, полям, спискам и т.д.), на которые можно устанавливать новые стили.
С кратким описанием самой программы мы сможете ознакомиться на странице Lazy Tool 3.5.
Источник: all-for-vkontakte.ru
Декомпиляция в Delphi
Delphi , Программа и Интерфейс , IDE и Компилятор
Декомпиляция в Delphi
Двухлетняя дочь программера спрашивает у мамы: — А правда, что программы после деинсталяции попадают на небо, на огромный сервер, который никогда не виснет? Мама задумчиво отвечает: — Если бы у твоего папы сервер никогда не вис, то ты, наверное, еще и не скомпилировалась бы. |
Читая форумы по программированию, иногда натыкаешься на вопрос типа: «У меня есть откомпилированная программа на Delphi. Как мне получить её исходный код?». Обычно такой вопрос возникает, когда программист потерял файлы проекта и у него остался только .exe. Как правило полностью восстановить исходный код на языке высокого уровня невозможно. Значит ли это, что другие тоже не смогут восстановить исходный код Вашей программы ? Хм . и да и нет .
Для начала сразу скажу, что восстановить исходный код в точности каким он был однозначно невозможно, так как не существует в мире такого декомпилятора, который бы смог сотворить такое.
После компиляции и линковки проекта и получения исполняемого файла все имена, используемые в программе конвертируются в адреса. Потеря имён означет, что декомпилятор создаст уникальное имя для каждой константы, переменной, функции и процедуры. Даже если мы и достигнем какого-то успеха в декомпиляции исполняемого файла, то получим уже другой синтаксис программы. Данная проблема связана с тем, что при компиляции практически идентичные куски кода могут быть скомпилированы в разные последовательности машинных команд (ASM), которые присутствуют в .exe файле. Естевственно декомпилятор не обладает такой степенью интеллектуальности, чтобы решить — какова же была последовательность инструкций языка высокого уровня в исходном проекте.
Когда же применяется декомпиляция ? Для этого существует довольно много причин. Вот некторые из них:
- Восстановление исходного кода;
- Перенос приложения на другую платформу;
- Определение наличия вирусов в коде программы или вредоносного кода;
- Исправление ошибок в программе, в случае, если создатель приложения не собирается этого делать 🙂
Легально ли всё это? Хотя декомпиляция и не является взломом, но утвердительно ответить на этот вопрос довольно сложно. Обычно программы защищены законом об авторских правах, однако в большинстве стран на декомпиляцию делается исключение. В часности, когда необходимо изменить интерфейс программы для конкретной страны, а сервис приложения не позволяет этого сделать.
На данный момент Borland не предоставляет никаких программных продуктов, способных декомпилировать исполняемые файлы (.exe) либо откомпилированные Delphi-модули (.dcu) в исходный код (.pas).
Если же Вы всё-таки решились попробовать декомпилировать исполняемый файл, то необходимо знать следующие вещи. Исходные коды на Delphi обычно хранятся в файлах двух типов: сам исходник в ASCII кодировке (.pas, .dpr) и файлы ресурсов (.res, .rc, .dfm, .dcr). Dfm файлы хранят в себе свойства объектов, содержащихся в форме. При создании конечного .exe, Delphi копирует в него информацию из .dfm файлов.
Каждый раз, когда мы изменяем координаты формы, описания кнопок или связанные с ними события, то Delphi записывает эти изменения в .dfm (за исключением кода процедур. Он сохраняется в файлах pas/dcu ). И наконец, чтобы получить при декомпиляции файл .dfm, нужно знать — какие типы ресурсов хранятся внутри Win32 исполняемого модуля.
Все программы, скомпилированные в Delphi имеют следующие секции: CODE, DATA, BSS, .idata, tls, .rdata, .rsrc. Самые важные для декомпиляции секции CODE и .rsrc. В статье «Adding functionality to a Delphi program» приведены некоторые интересные факты о исполняемых форматах Delphi, а так же информация о классах и DFM ресурсах. В этой статье есть один интересный момент под заголовком: «Как добавить свой обработчик события в уже откомпилированный файл, например, чтобы изменять тект на кнопке».
Среди многих типов ресурсов, которые сохранены в .exe файле, интерес представляет RT_RCDATA, который хранит информацию, которая были в DFM файле перед трансляцией. Чтобы извлеч DFM данные из .exe файла, мы можем вызываться API функцией EnumResourceNames.
Исскуство декомпилирования традиционно было уделом мастеров, знакомых с ассемблером и отладчиками. Некоторые Delphi декомпиляторы создают впечатление, что любой, даже с ограниченными техническими знаниями, может изменить по своему желанию большинство исполняемых файлов Delphi.
И в заключение, если Вы заинтересовались декомпилованием, то предлагаю Вам несколько Delphi декомпиляторов:
- Все dfm файлы. Вы сможете открывать их и редактировать в Delphi
- Все объявленные методы с хорошо комментированным кодом на ассемблере с ссылками на строки, импортированных функций, методов и компонент в юните, блоки Try-Except и Try-Finally.
- Большое количество дополнительной информации.
- Вы можете создать папку Delphi проекта со всеми файлами dfm, pas, dpr. Не забудьте, что pas файлы содержат ассемблерный код.
Статья Декомпиляция в Delphi раздела Программа и Интерфейс IDE и Компилятор может быть полезна для разработчиков на Delphi и FreePascal.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
Источник: www.kansoftware.ru