Внутренний формат ресурсов Windows
Внутренний формат ресурсов Windows
В каталоге DELPHIDEMOSRESXPLOR есть пример работы с ресурсами Windows на самом `фундаментальном` уровне — непосредствено с форматом PE COFF (Portable Executable Common Object File Format) для Win32. Данный раздел написан, в основном, для тех, кто захочет разобраться в этом стандартном примере Delphi.
Сами по себе ресурсы — индексированный набор данных с записями переменной длины. Чтобы конкретную запись ресурса можно было найти, у нее есть один из двух идентификаторов — имя (строка символов UNICODE) или целое число. Целыми числами идентифицируются, например, каталоги стандартных типов ресурсов и строки в таблицах. Большинство записей ресурсов стандартных типов идентифицируются именами. Практически, в именах ресурсов разумно использовать только подмножетсво стандартных символов ASCII (коды от 0 до 255). Описание стандартных типов ресурсов Windows можно посмотреть в on-line help`е любой IDE C или Delphi. Любопытно, что способ идентификации ресурса ( целое число или ссылка на имя ) специфицирован, скорее, не на уровне стандарта, а на уровне принятых соглашений. Для поиска ресурса мы, в общем случае, задаем три параметра:
• Тип — один из стандартных кодов типа ресурса. В вызовах API это может быть либо адресом строки, содержащей одно из стандартных имен, либо — одна из констант RT_xxx из DELPHISOURCERTLWINWINDOWS.PAS.
• Идентификатор. В зависимости от типа ресурса, это может быть целое число или имя.
• Язык ресурса. Кодируется целым числом.
Формат ресурсов PE COFF ориентирован чтобы:
– максимально быстро находить нужный ресурс по указаным трем параметрам,
– расположить ресурсы достаточно компактно,
– переносить скомпилированные ресурсы между процессорами с разными правилами адресации.
Далее используется термин RVA (relative virtual address), я его поясню. Все адреса в защищенных многозадачных системах (не только на x286..586) обычно делаются `виртуальными`: То есть, пользовательское приложение не должно иметь шанс узнать что-либо о физических адресах — иначе оно теоретически может разрушить любую защиту операционной системы. В Windows строгой защиты в этом смысле нет, но есть еще одна причина `виртуальности` адресов — динамическая загрузка/выгрузка данных из ОЗУ на диск для организации виртуальной памяти. Процессор аппаратно, `на лету`, транслирует виртуальные адреся в физические по таблицам, созданным ядром операционной системы.
Теперь о слове `relative`. Операционной системе, по большому счету, без разницы, какой именно виртуальный адрес дать первому байту образа исполняемого файла в ОЗУ. А линкеру и самой программе, в ряде случаев, удобнее работать с конкретным значением. Оно называется `ImageBase`; линкер записывает его в заголовке PE-файла. По техническим причинам, оно не может быть произвольным для Windows-программ. В Delphi есть директива `{$ImageBase …}`. Так вот, RVA объекта – это его смещение относительно значения `ImageBase`. Обычный адрес объекта (он, кстати, тоже виртуальный) есть сумма значений глобальной переменной `ImageBase` и `RVA` данного объекта.
В тексте использована ассемблерная мнемоника: `DD` и `DW` (Define Double и Define Word), что означает, соответственно, 32– и 16-разрядное слово. Символ `|` означает `или`, `либо`.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
8.11. Файловый сервер FTP вместо общих ресурсов Windows
8.11. Файловый сервер FTP вместо общих ресурсов Windows В своей домашней сети я заменил службу общих ресурсов Windows на FTP-сервер. Конечно, общие ресурсы – это не только обмен файлами, но еще и общие принтеры. Однако необходимости в разделении принтера у меня нет – я могу
Внутренний поиск по сайту – мы категорически против
Внутренний поиск по сайту – мы категорически против Нас часто просят оценить тот или иной веб-сайт. В первую очередь мы смотрим, насколько хорошо работает внутренний поиск по сайту, если таковой имеется. Это отличный способ получить представление о том, как быстро
Формат MS-DOS для файлов и папок (Windows NT/2000/XP)
Формат MS-DOS для файлов и папок (Windows NT/2000/XP) По умолчанию Windows NT и выше создают в разделе NTFS специальную таблицу, содержащую все имена файлов и папок в формате MS-DOS по формуле 8.3 (8 символов имени файла и 3 символа для его расширения). Данная возможность в настоящее время не
2. Сделать внутренний запуск по своей базе подписчиков
2. Сделать внутренний запуск по своей базе подписчиков Делаем внутренний запуск по своей базе подписчиков по схеме из предыдущей интеллект-карты: либо скидка предоставляется в первые 36 часов, либо продажи идут 36
3.2.3. Внутренний формат вещественных чисел
3.2.3. Внутренний формат вещественных чисел Рассмотрим тип Single, т. к. он самый короткий и, следовательно, самый простой для понимания. Остальные типы отличаются от него только количественно. В дальнейшем числа в формате Single мы будем записывать как s eeeeeeee mmmmmmmmmmmmmmmmmmmmmmm, где s
5.2.6. Формат Windows INI
5.2.6. Формат Windows INI Многие программы в Microsoft Windows используют текстовый формат данных, подобный фрагменту, приведенному в примере 5.6. В данном примере необязательные ресурсы с именами account, directory, numeric_id и developer связываются с именованными проектами python, sng, f etchmail и py-howto. В записи
5.2.6. Формат Windows INI
5.2.6. Формат Windows INI Многие программы в Microsoft Windows используют текстовый формат данных, подобный фрагменту, приведенному в примере 5.6. В данном примере необязательные ресурсы с именами account, directory, numeric_id и developer связываются с именованными проектами python, sng, fetchmail и py-howto. В записи
Формат ресурсов .NET
Формат ресурсов .NET До этого момента все наши приложения, использующие внешние ресурсы (например, файлы изображений), требовали, чтобы загружаемые файлы находились в каталоге приложения. Поэтому для загрузки этих файлов мы использовали их непосредственные имена.//
13.7. Получение ресурсов из библиотеки ресурсов
13.7. Получение ресурсов из библиотеки ресурсов Постановка задачи Требуется получить фотографии или видео непосредственно из библиотеки фотографий, не прибегая к использованию каких-либо встроенных компонентов графического пользовательского
Внутренний курсор
Внутренний курсор При чтении в потоке сервер базы данных использует указатель, чей адрес изменяется при продвижении чтения от начала к концу. Этот указатель называется курсором - не путайте с курсором набора, который создается в SQL с помощью DECLARE CURSOR. Внутренние курсоры
"Внутренний" экспорт
"Внутренний" экспорт Рассмотрим объявление классаindexingзамечание: "Ошибочное объявление (объяснение см. ниже)"class S6 featurex: S6my_routine is do ... print (x.secret) ... endfeature {NONE}secret: INTEGERend -- class S6Наличие в объявлении класса атрибута x типа S6 и вызова x.secret делает его собственным клиентом. Но такой
Внутренний анализ устройства: атаки на электрическую схему
Внутренний анализ устройства: атаки на электрическую схему Многие из уязвимостей и изъянов в системе защиты, конструктивных недостатков устройства обнаруживаются на этапе анализа электрической схемы. К этому моменту корпус устройства уже вскрыт (будем надеяться) и
Внутренний мир Автор: Сергей Озеров.
Внутренний мир Автор: Сергей Озеров. © 2004, Издательский дом | http://www.computerra.ru/Журнал «Домашний компьютер» | http://dk.compulenta.ru/Этот материал Вы всегда сможете найти по его постоянному адресу: /2006/121/280019/Нет предела совершенству. Казалось бы: сколько уже изобрели всевозможных