Прежде чем ответить, как поместить исполняемый файл в 128 байт, нам нужно сначала разобраться с несколькими вещами.
- В файле dicom должны быть символы
DICM
(расширение файла) в байтах 121-124 (раздел префикса) для распознавания как файл dicom - Исполняемый файл Windows должен иметь заголовок DOS в первых 64 байтах файла, чтобы иметь возможность быть исполняемым в соответствии с PE (Portable Executable)Формат файла.
- Комбинируя вышеупомянутые 2 пункта, создается новый формат файла, называемый PEDICOM, который является как dicom, так и исполняемым файлом. PEDICOM имеет архитектуру, показанную на рисунке выше.
- PEDICOM содержит заголовок и содержимое исполняемого файла в разных разделах, поскольку весь исполняемый файл не может уместиться в 128 байтов.
- Windows предоставляет список структур и API-интерфейсов Win32 для чтения / записи этих PE-файлов по разделам в заголовке winnt.h.
Создание файла PEDICOM:
- Заголовок DOS (
IMAGE_DOS_HEADER
) имеет 1 поле с именем e_lfanew
, которое содержит смещение фактического содержимого PE. Это позволяет хранить весь исполняемый код как минимум в двух ячейках памяти. - Заголовок PE (
IMAGE_NT_HEADER
) имеет количество разделов и указателей на разделы (код, данные, стек и т. Д.)
Теперь, чтобы ответить на исходный вопрос, весь исполняемый файл не может храниться в 128 байтах. Однако 128 байтов данных достаточно, чтобы объявить файл исполняемым, то есть dos header
и dos stub
могут храниться в 128 байтах, в то время как остальная часть исполняемого файла может храниться где-то еще, в данном случае в закрытом теге dicom. и поле в заголовке может указывать на это. Сделайте содержащий файл допустимым и допустимым исполняемым файлом.