Примеры больших исполняемых файлов
Пример сценариев использования больших исполняемых файлов.
Пример модели адресного пространства большой программы
MAXDATA=0x50000000(non-DSA)- в сегментах 0xB, 0xC and 0xE необходимы области shmat/mmap
- Текст и пред-перемещенные данные доступа области библиотеки
0x0: системный сегмент
0x1:
0x2: частные зависимости времени исполнения / стек
0x3: куча процесса
0x4: куча процесса
0x5: куча процесса
0x6: куча процесса
0x7: куча процесса
0x8:
0x9:
0xA:
0xB: shmat/mmap (размещено после exec)
0xC: shmat/mmap (размещено после exec)
0xD: текст общей библиотеки
0xE: shmat/mmap (размещено после exec)
0xF: пред-перемещенные данные общей библиотеки
Из данного примера можно видеть, что сегменты 0x8–0xA доступны для исполняемого файла.
HUGE_EXEC=0HUGE_EXEC=0x8HUGE_EXEC=0x9
Опции 1 и 2 поместят исполняемый файл в сегменты 0x8–0x9, а опция 3 - в сегмент 0x9–0xA.
Пример модели адресного пространства очень большой программы
MAXDATA=0x50000000 DSA- в сегментах 0xB, 0xC and 0xE необходимы области shmat/mmap
- Текст и пред-перемещенные данные доступа области библиотеки
0x0: системный сегмент
0x1:
0x2: частные зависимости времени исполнения / стек
0x3: куча процесса
0x4: |
0x5: |
0x6: v
0x7: ____________ (лимит данных)
0x8:
0x9:
0xA:
0xB: shmat/mmap (размещено после exec)
0xC: shmat/mmap (размещено после exec)
0xD: текст общей библиотеки
0xE: shmat/mmap (размещено после exec)
0xF: пред-перемещенные данные общей библиотеки
Из данного примера можно видеть, что сегменты 0x4–0xA доступны для исполняемого файла.
HUGE_EXEC=0x8HUGE_EXEC=0x9
Опции 1 поместит исполняемый файл в сегменты 0x8–0x9, а опция 2 - в сегмент 0x9–0xA.
HUGE_EXEC=0 не будет подходящим для данного клиента, т.к. система выберет сегменты 0xB–0xC для исполняемого файла (из-за динамического распределения сегментов (DSA). Это сделает эти сегменты недоступными для shmat/mmap после exec. Задание для HUGE_EXEC
любого из значений сегментов 0x4, 0x5, 0x6 или 0x7 при разрешенной запрошенной вставке вызовет
ограничение роста кучи процесса сегментом под запрошенным стартовым сегментом.Пример модели адресного пространства очень большой программы без доступа к общей библиотеки
MAXDATA=0xB0000000 DSA- Нет областей shmat/mmap
- Нет доступа к общей библиотеке
0x0: системный сегмент
0x1:
0x2: частные зависимости времени исполнения / стек
0x3: куча процесса
0x4: |
0x5: |
0x6: |
0x7: |
0x8: |
0x9: |
0xA: |
0xB: |
0xC: v
0xD: ____________ (лимит данных)
0xE:
0xF:
Из данного примера можно видеть, что сегменты 0x4–0xF доступны для исполняемого файла.
HUGE_EXEC=0HUGE_EXEC=0xE
Обе опции поместит исполняемый файл в сегменты 0xE–0xF.
Пример модели адресного пространства процесса по умолчанию
MAXDATA=0(не DSA)- Нет областей shmat/mmap
- Текст и пред-перемещенные данные доступа области библиотеки
0x0: системный сегмент
0x1:
0x2: частные зависимости времени исполнения / куча процесса / стек
0x3:
0x4:
0x5:
0x6:
0x7:
0x8:
0x9:
0xA:
0xB:
0xC:
0xD: текст общей библиотеки
0xE:
0xF: пред-перемещенные данные общей библиотеки
Из данного примера можно видеть, что сегменты 0x3–0xC доступны для исполняемого файла.
1. HUGE_EXEC=0
2. HUGE_EXEC=0x3
...
10. HUGE_EXEC=0xBОпции 1 и 2 имеют одинаковые результаты – вставка исполняемого файла в сегмент 0x3–0x4.
Пример сегмента текста shtext_in_one с одной областью общей библиотеки
MAXDATA=0x70000000(non-DSA)- в сегментах 0xC, 0xD, 0xE и 0xF необходимы области shmat/mmap
- Доступ к общей библиотеке
0x0: системный сегмент
0x1: текст общей библиотеки
0x2: частные зависимости времени исполнения / стек
0x3: куча процесса
0x4: куча процесса
0x5: куча процесса
0x6: куча процесса
0x7: куча процесса
0x8: куча процесса
0x9: куча процесса
0xA:
0xB:
0xC: shmat/mmap (размещено после exec)
0xD: shmat/mmap (размещено после exec)
0xE: shmat/mmap (размещено после exec)
0xF: shmat/mmap (размещено после exec)
Из данного примера можно видеть, что сегменты 0xA–0xB доступны для исполняемого файла.
HUGE_EXEC=0,shtext_in_oneHUGE_EXEC=0xA,shtext_in_one
Обе опции поместит исполняемый файл в сегменты 0xA–0xB, а общую библиотеку в сегмент 0x1.
Пример сегментов текста shtext_in_one с двумя областями общей библиотеки
MAXDATA=0x70000000 DSA- в сегментах 0xA и 0xB необходимы области shmat/mmap
- Доступность текста области общей библиотеки (созданная с помощью атрибута doubletext32)
0x0: системный сегмент
0x1: текст общей библиотеки (первичный)
0x2: частные зависимости времени исполнения / стек
0x3: куча процесса
0x4: |
0x5: |
0x6: |
0x7: |
0x8: v
0x9: ____________ (лимит данных)
0xA: shmat/mmap (размещено после exec)
0xB: shmat/mmap (размещено после exec)
0xC:
0xD:
0xE:
0xF: текст общей библиотеки (вторичный)
Из данного примера можно видеть, что сегменты 0xC–0xE доступны для исполняемого файла.
HUGE_EXEC=0,shtext_in_oneHUGE_EXEC=0xC,shtext_in_one
Обе опции поместит исполняемый файл в сегменты 0xC–0xE, а общую библиотеку в сегменты 0x1 и 0xF.