Виртуальная библиотека Delphi - [31]

Шрифт
Интервал

>DD NAME RVA       | INTEGER ID

>DD DATA ENTRY RVA | SUBDIR RVA


декларация в RXTypes.Pas:

>IMAGE_RESOURCE_DIRECTORY_ENTRY = packed record

>  Name: DWORD; // Or ID: Word (Union)

>  OffsetToData: DWORD;

>end;

Первое поле содержит либо `NAME RVA` — адрес строки (UNICODE) с именем, либо — `INTEGER ID` – целочисленный идентификатор. `INTEGER ID` может быть, например, одним из стандартных кодов типа ресурса или заданным пользователем кодом строки в таблице строк.

Самый старший бит второго поля (31-й бит) называется `Escape-флагом`. Если он установлен в `1`, считается что данная `DIR ENTRY` — ссылка на другой подкаталог ресурсов. Если сброшен в `0` — данная запись ссылка на данные ресурса. Понятно, при вычислении адреса этот бит всегда должен считаться `0`.

Строка, на которую указывает `NAME RVA`, очень похожа на паскалевскую short-string, только вместо байтов она состоит из 16-битные слов. Самое первое слово – длина строки, за ним лежат 16-битные символы UNICODE. Физически линкер кладет эти строки переменной длиины между каталогами и собственно данными ресурсов.

Понятно, что `SUBDIR RVA` указывает на совершенно аналогичную таблицу подкаталога.

`DATA ENTRY RVA` указывает на запись `RESOURCE DATA ENTRY` такого вида:

>DD DATA RVA

>DD SIZE

>DD CODEPAGE

>DD RESERVED


декларация в RXTypes.Pas:

>IMAGE_RESOURCE_DATA_ENTRY = packed record

>  OffsetToData    : DWORD;

>  Size            : DWORD;

>  CodePage        : DWORD;

>  Reserved        : DWORD;

>end;

`DATA RVA` — адрес бинарных данных, `SIZE` — их размер. `CODEPAGE` (кодовая страницa) обычно имеет снысл только для строковых ресурсов. Оговаривается, что в Win32 это должна быть одна из стандартных страниц UNICODE. Сами бинарные данные могут жить либо прямо за полем `RESERVED`, либо где-то в другом месте — смотря куда линкер их положит.

Дамп памяти (взят из PE.TXT)

Далее я привожу целиком фрагмент файла PE.TXT. Это — конкретный пример размещения ресурсов с подробным дампом памяти.

The following is an example for an app. which wants to use the following data as resources:

>TypeId# NameId# Language ID Resource Data

>00000001 00000001 0 00010001

>00000001 00000001 1 10010001

>00000001 00000002 0 00010002

>00000001 00000003 0 00010003

>00000002 00000001 0 00020001

>00000002 00000002 0 00020002

>00000002 00000003 0 00020003

>00000002 00000004 0 00020004

>00000009 00000001 0 00090001

>00000009 00000009 0 00090009

>00000009 00000009 1 10090009

>00000009 00000009 2 20090009


>Then the Resource Directory in the Portable format looks like:

>Offset Data

>0000: 00000000 00000000 00000000 00030000 (3 entries in this directory)

>0010: 00000001 80000028 (TypeId #1, Subdirectory at offset 0x28)

>0018: 00000002 80000050 (TypeId #2, Subdirectory at offset 0x50)

>0020: 00000009 80000080 (TypeId #9, Subdirectory at offset 0x80)

>0028: 00000000 00000000 00000000 00030000 (3 entries in this directory)

>0038: 00000001 800000A0 (NameId #1, Subdirectory at offset 0xA0)

>0040: 00000002 00000108 (NameId #2, data desc at offset 0x108)

>0048: 00000003 00000118 (NameId #3, data desc at offset 0x118)

>0050: 00000000 00000000 00000000 00040000 (4 entries in this directory)

>0060: 00000001 00000128 (NameId #1, data desc at offset 0x128)

>0068: 00000002 00000138 (NameId #2, data desc at offset 0x138)

>0070: 00000003 00000148 (NameId #3, data desc at offset 0x148)

>0078: 00000004 00000158 (NameId #4, data desc at offset 0x158)

>0080: 00000000 00000000 00000000 00020000 (2 entries in this directory)

>0090: 00000001 00000168 (NameId #1, data desc at offset 0x168)

>0098: 00000009 800000C0 (NameId #9, Subdirectory at offset 0xC0)

>00A0: 00000000 00000000 00000000 00020000 (2 entries in this directory)

>00B0: 00000000 000000E8 (Language ID 0, data desc at offset 0xE8

>00B8: 00000001 000000F8 (Language ID 1, data desc at offset 0xF8

>00C0: 00000000 00000000 00000000 00030000 (3 entries in this directory)

>00D0: 00000001 00000178 (Language ID 0, data desc at offset 0x178

>00D8: 00000001 00000188 (Language ID 1, data desc at offset 0x188

>00E0: 00000001 00000198 (Language ID 2, data desc at offset 0x198


>00E8: 000001A8 (At offset 0x1A8, for TypeId #1, NameId #1, Language id #0

>00000004 (4 bytes of data)

>00000000 (codepage)

>00000000 (reserved)

>00F8: 000001AC (At offset 0x1AC, for TypeId #1, NameId #1, Language id #1

>00000004 (4 bytes of data)

>00000000 (codepage)

>00000000 (reserved)

>0108: 000001B0 (At offset 0x1B0, for TypeId #1, NameId #2,

>00000004 (4 bytes of data)

>00000000 (codepage)

>00000000 (reserved)

>0118: 000001B4 (At offset 0x1B4, for TypeId #1, NameId #3,

>00000004 (4 bytes of data)

>00000000 (codepage)

>00000000 (reserved)

>0128: 000001B8 (At offset 0x1B8, for TypeId #2, NameId #1,

>00000004 (4 bytes of data)

>00000000 (codepage)

>00000000 (reserved)

>0138: 000001BC (At offset 0x1BC, for TypeId #2, NameId #2,

>00000004 (4 bytes of data)

>00000000 (codepage)

>00000000 (reserved)

>0148: 000001C0 (At offset 0x1C0, for TypeId #2, NameId #3,

>00000004 (4 bytes of data)

>00000000 (codepage)

>00000000 (reserved)

>0158: 000001C4 (At offset 0x1C4, for TypeId #2, NameId #4,

>00000004 (4 bytes of data)

>00000000 (codepage)

>00000000 (reserved)

>0168: 000001C8 (At offset 0x1C8, for TypeId #9, NameId #1,


Еще от автора Неизвестный Автор
Галчонок

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Призраки ночи

В книге собраны предания и поверья о призраках ночи — колдунах и ведьмах, оборотнях и вампирах, один вид которых вызывал неподдельный страх, леденивший даже мужественное сердце.


Закат  вечности

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


mmmavro.org | День 131, Победа

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Песнь о Нибелунгах

…«Песнь о Нибелунгах» принадлежит к числу наиболее известных эпических произведений человечества. Она находится в кругу таких творений, как поэмы Гомера и «Песнь о Роланде», «Слово о полку Игореве» и «Божественная комедия» Данте — если оставаться в пределе европейских литератур…В. Г. Адмони.


mmmavro.org | День 132, Поэт

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Рекомендуем почитать
Графика DirectX в Delphi

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Вторая жизнь старых компьютеров

Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.


DirectX 8. Начинаем работу с DirectX Graphics

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.