Библиотеки колибри 2.0
Posted: Wed Jun 17, 2009 11:27 am
Вопрос в каком формате должна быть ДЛЛ ? Скомпилировать ffmpeg в COFF если и можно то очень непросто.
Мнэээ? Кто-то совсем недавно что-то говорил про гарантии, и мне казалось, что этот кто-то тоже подписывался ником Galkov. Ну а реальная система, которая вовсе не гарантирует всё и по любому поводу, - это и есть текущее состояние планировщика...Galkov wrote:Что бы появилась возможность создать реальную систему вовсе не надо гарантировать все и по любому поводу.
Угу.<Lrz> wrote:Насколько я понял, diamond говорит о необходимости глобальной перестройке ядра ОС, со сменой API, как следствие и GUI. Т.е. это означает, что придеться переписывать каждую программу.
Дважды два - таки четыре, и сила человеческой мысли тут ни при чём. Результат всегда следует из предпринимаемых действий, и мысль может выбрать между сценариями действий и реализовать действия, но не изменить вытекающий из предпринятых действий результат.Galkov wrote:Ну во-первых, мне кажется, что в нашей... Типа, сила человеческой мысли - безгранична.
Многопроцессорность?Galkov wrote:Во-вторых, diamond, какие глобальные изменения ты считаешь необходимыми, которые мы никогда не сможем достигнуть "локальными" изменениями
Очевидно, что ffmpeg можно скомпилировать в PE DLL, а PE уже можно автоматически перегнать в COFF.<Lrz> wrote:Только вопрос в каком формате должна быть ДЛЛ ? Скомпилировать ffmpeg в COFF если и можно то очень непросто.
Против PE у меня есть ровно одно возражение - слишком много мусора. Прямо начиная с MZ-заголовка, и продолжая PE-заголовком, в котором куча лишних полей. В ELF тоже мусора хватает - в первом же 16-байтном поле используется всего 7 байт, и то без двух можно было бы обойтись, и продолжая совершенно ненужной загрузчику section table.Serge wrote:Если делать свой свой формат всё затянется ещё на три года. Для PE всё готово.
...в котором, например, отсутствует V86 со всеми вытекающими последствиями (наличествующая там аппаратная виртуализация - вещь, конечно, интересная, но её может и не быть).<Lrz> wrote:Я предлагаю отказаться от режима IA-32 и сконцентрироваться на режиме AMD64/EMT64.
Code: Select all
Очевидно, что ffmpeg можно скомпилировать в PE DLL, а PE уже можно автоматически перегнать в COFF
Я про то, что можно независимо от этого ещё немного ужать, если отказаться от полей, не нужных для загрузки.Serge wrote:ld позволяет неплохо ужать PE если поиграть с ключами линковки и скриптом.
Релоки в PE хорошо хранятся, так что при преобразовании размер файла возрастает, хотя и не в полтора раза. Впрочем, пакуются эти таблицы неплохо.Serge wrote:А он не будет раза в полтора толще ?
Ну вообще это для библиотек предназначалось. Там таблица релокаций обычно есть. А если нет, то можно сделать (при компиляции, естественно).Если это экзешник то там нет релокаций, все адреса уже пофиксены.
Из IMAGE_SECTION_HEADER я бы выкинул Name, PointerToRelocations, PointerToLinenumbers, NumberOfRelocations, NumberOfLinenumbers, а в Characteristics фактически используются только 4 старшие бита (shared, execute, read, write), так что его можно объединить с SizeOfRawData (оставив эти биты старшими), достигая красивого размера в 10h. Все структуры, размещающиеся вне заголовка, пусть остаются как есть.Я согласен и на стрипнутый PE, если сохранится формат основных структур IMAGE_SECTION_HEADER, IMAGE_BASE_RELOCATION, IMAGE_IMPORT_DESCRIPTOR и т.п.
Code: Select all
struc stripped_pe_header_32
{
Signature dd ? ; можно оставить 'PE', можно 'KPE' или 'SPE' или 'PES'
Characteristics dw ? ; IMAGE_FILE_HEADER.Characteristics, except that
; IMAGE_FILE_32BIT_MACHINE is set
NumberOfSections dw ? ; IMAGE_FILE_HEADER.NumberOfSections
ImageBase dd ?
AddressOfEntryPoint dd ?
SectionAlignment dw ?
FileAlignment dw ?
MajorOperatingSystemVersion dw ?
MinorOperatingSystemVersion dw ?
SizeOfImage dd ?
SizeOfHeaders dd ? ; first SizeOfHeaders bytes from the file are mapped to ImageBase
SizeOfStackReserve dd ?
SizeOfStackCommit dd ?
SizeOfHeapReserve dd ?
SizeOfHeapCommit dd ?
Subsystem db ?
NumberOfRvaAndSizes db ?
padding dw ?
}
struc stripped_pe_header_64
{
Signature dd ?
Characteristics dw ? ; IMAGE_FILE_HEADER.Characteristics, except that
; IMAGE_FILE_32BIT_MACHINE is cleared
NumberOfSections dw ?
ImageBase dq ?
AddressOfEntryPoint dd ?
SectionAlignment dw ?
FileAlignment dw ?
MajorOperatingSystemVersion dw ?
MinorOperatingSystemVersion dw ?
SizeOfImage dd ?
SizeOfHeaders dd ?
SizeOfStackReserve dd ?
SizeOfStackCommit dd ?
SizeOfHeapReserve dd ?
SizeOfHeapCommit dd ?
Subsystem db ?
NumberOfRvaAndSizes db ?
padding dw ?
}
Code: Select all
SPE_DIRECTORY_IMPORT = 0
SPE_DIRECTORY_EXPORT = 1
SPE_DIRECTORY_BASERELOC = 2
SPE_DIRECTORY_RESOURCE = 3 ; нужно ли это вообще?
SPE_DIRECTORY_TLS = 4
SPE_DIRECTORY_BOUND_IMPORT = 5
Code: Select all
struc stripped_pe_section_header
{
VirtualSize dd ?
VirtualAddress dd ?
SizeOfRawData_MemProtect dd ? ; lowest 28 bits are SizeOfRawData,
; highest 4 bits give memory protection
PointerToRawData dd ?
}
IMAGE_SCN_MEM_SHARED = 0x10000000 ; Section is shareable.
IMAGE_SCN_MEM_EXECUTE = 0x20000000 ; Section is executable.
IMAGE_SCN_MEM_READ = 0x40000000 ; Section is readable.
IMAGE_SCN_MEM_WRITE = 0x80000000 ; Section is writeable.
Code: Select all
struc stripped_pe_header_32
{
Signature dd ? ; можно оставить 'PE', можно 'KPE' или 'SPE' или 'PES'
Characteristics dw ? ; IMAGE_FILE_HEADER.Characteristics, except that
; IMAGE_FILE_32BIT_MACHINE is set
NumberOfSections dw ? ; IMAGE_FILE_HEADER.NumberOfSections
ImageBase dd ?
AddressOfEntryPoint dd ?
SectionAlignment dw ?
FileAlignment dw ?
MajorOperatingSystemVersion dw ?
MinorOperatingSystemVersion dw ?
SizeOfImage dd ?
SizeOfStackReserve dd ?
SizeOfHeapReserve dd ?
SizeOfHeaders dd ? ; first SizeOfHeaders bytes from the file are mapped to ImageBase
Subsystem db ?
NumberOfRvaAndSizes db ?
padding dw ?
}
struc stripped_pe_header_64
{
Signature dd ?
Characteristics dw ? ; IMAGE_FILE_HEADER.Characteristics, except that
; IMAGE_FILE_32BIT_MACHINE is cleared
NumberOfSections dw ?
ImageBase dq ?
AddressOfEntryPoint dd ?
SectionAlignment dw ?
FileAlignment dw ?
MajorOperatingSystemVersion dw ?
MinorOperatingSystemVersion dw ?
SizeOfImage dd ?
SizeOfStackReserve dq ?
SizeOfHeapReserve dq ?
SizeOfHeaders dd ?
Subsystem db ?
NumberOfRvaAndSizes db ?
padding dw ?
}
SPE_DIRECTORY_IMPORT = 0
SPE_DIRECTORY_EXPORT = 1
SPE_DIRECTORY_BASERELOC = 2
SPE_DIRECTORY_EXCEPTION = 3
SPE_DIRECTORY_TLS = 4
SPE_DIRECTORY_BOUND_IMPORT = 5
SPE_DIRECTORY_RESOURCE = 6