Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2022, 15:54   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию Имена процедур в exe файле

Недавно открыл exe-шник программы через тестовый просмотр.

Я всегда думал, что все названия процедур и переменных - это чисто для человека, а компилятор их заменяет на адреса в памяти.

А тут, внезапно, обнаруживаю в exe-шнике имена кучи процедур... И тут два вопроса:
1. Зачем это делается? Если процессору нужны адреса в памяти, а не имена
2. Можно ли как-то перенастроить компилятор, чтобы меньше мусора было в программе?
Kronos913 вне форума Ответить с цитированием
Старый 18.09.2022, 15:58   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
1. Зачем это делается? Если процессору нужны адреса в памяти, а не имена
Чтобы операционная система после загрузки exe в память могла сопоставить адреса процедур в разных модулях друг с другом.

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
2. Можно ли как-то перенастроить компилятор, чтобы меньше мусора было в программе?
В секцию импорта добавляются имена только тех процедур, которые были использованы в коде этого exe. В секции экспорта же перечисляются всегда имена всех процедур, которые можно сопоставлять для внешнего вызова.

От этого механизма можно уйти, если выполнять линковку модулей в памяти вручную.

А вот убрать из exe отладочную информацию, в которой тоже могут встречаться не только имена процедур, но и весь исходный код, можно. И даже нужно.

Последний раз редактировалось macomics; 18.09.2022 в 16:02.
macomics вне форума Ответить с цитированием
Старый 18.09.2022, 16:08   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
А вот убрать из exe отладочную информацию, в которой тоже могут встречаться не только имена процедур, но и весь исходный код, можно. И даже нужно.
В смысле, там может оказаться еще и весь текстовый код программы?
А как это сделать?
Kronos913 вне форума Ответить с цитированием
Старый 18.09.2022, 16:12   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Не совсем текст. Отладочная информация. Только строки, которые будут реально исполняться. Описания структур и классов скорее всего не будут включаться. Создайте пустой exe и посмотрите внутри. Если там есть секция .debug или как-то так, то в этой секции будет ваш код. Пустой нужен для того, чтобы было минимальное число дополнительных строк кода. Как минимум там должны быть строки из dpr файла.

ADD: Первые 512 байт это заголовок PE файла. В нем содержится много разной информации. В том числе и информация о секциях, которые содержаться в PE файле. Чтобы найти отладочную информацию - надо расшифровать описания секций в этом заголовке

Последний раз редактировалось macomics; 18.09.2022 в 16:15.
macomics вне форума Ответить с цитированием
Старый 18.09.2022, 20:53   #5
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию

А как убрать эту информацию или exe-шника?
И это ж не отобразится на работоспособности?
Kronos913 вне форума Ответить с цитированием
Старый 18.09.2022, 20:56   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

В Release отладочная информация не включается компилятором. Отладочную информацию используют только отладчики для навигации по коду. На работоспособность программы она не влияет.
macomics вне форума Ответить с цитированием
Старый 18.09.2022, 21:18   #7
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Ну если компилировать в Debug, то программа будет выполняться медленнее. В любом случае режим Debug исключительно на время разработки, готовую программу всегда надо компилировать в Release.
Arigato вне форума Ответить с цитированием
Старый 18.09.2022, 21:25   #8
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Потому что в Debug версию включается не только информация для отладчика, но еще и дополнительный код обработки ошибок. Когда собираете Release, то частично код изменяется. Убираются некоторые проверки на наличие ошибок.
macomics вне форума Ответить с цитированием
Старый 19.09.2022, 16:18   #9
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию

Цитата:
готовую программу всегда надо компилировать в Release.
А как это сделать?
Kronos913 вне форума Ответить с цитированием
Старый 19.09.2022, 21:30   #10
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Смотря на чем вы пишете.
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В файле записаны данные о результатах сдачи экзамена. Вывести в другой файл фамилии и имена тех учеников, которые получили больше 80 баллов. Вася195 Паскаль, Turbo Pascal, PascalABC.NET 8 27.10.2016 13:21
Ввести два файла F1, F2. Найти максимальные значения в каждом файле. В каждом файле заменить компоненты qwerty2106 Паскаль, Turbo Pascal, PascalABC.NET 1 07.06.2015 22:11
список процедур в DCU файле iliili Паскаль, Turbo Pascal, PascalABC.NET 1 29.06.2011 20:38
одновременное выполнение разных процедур в одном файле? gramp Microsoft Office Excel 15 25.03.2011 12:15
Поиск данных в текстовом файле (в самом файле! а не в Memo и не загружая всю инфу из файла в одну строку glagoff Помощь студентам 1 05.05.2010 13:00