DCU в Delphi XE2

Файлы *.dcu в delphi xe2 для приложения firemonkey не зависят от платформ. здесь. как для 32-битных, так и для 64-битных и других операционных систем.

Если да, то как устроены файлы dcu. это что-то похожее на предыдущее (delphi 1-delphi xe) или что-то вроде промежуточного языка (например, java или .net)

этот новый dcu облегчит декомпиляцию файлов dcu.

Основная цель этого вопроса - узнать некоторые подробности о плюсах и минусах новых файлов dcu для firemonkey.


person VibeeshanRC    schedule 27.09.2011    source источник
comment
Эта ссылка не предполагает, что файл dcu, скомпилированный на Mac, не зависит от платформы. Я считаю, что требуется отдельная компиляция для Mac, и созданный dcu не будет совместим с dcu, созданным путем компиляции под Windows (и я не ожидаю, что 32-битные и 64-битные компиляции под Windows будут совместимы друг с другом.   -  person Larry Lustig    schedule 27.09.2011
comment
@Larry Lustig, должно быть иначе, объектные файлы зависят от процессора, но не от ОС. Впрочем, точно никто не скажет, формат файла dcu внутренний и приватный. Насколько я знаю, в настоящее время никто не занимается исследованиями по этому вопросу.   -  person Premature Optimization    schedule 27.09.2011
comment
@Downvoter Это не так просто. Объектные файлы специфичны для ЦП, а также для платформы ABI. Mac и Windows имеют очень разные ABI.   -  person David Heffernan    schedule 27.09.2011
comment
@ Дэвид Хеффернан, в общем случае ABI не проблема. Однако при условии, что любая попытка взаимодействия с ОС нарушит такую ​​переносимость.   -  person Premature Optimization    schedule 27.09.2011
comment
@Downvoter ABI определенно является проблемой. Подумайте о требованиях к выравниванию стека на Mac. И есть еще много причин, по которым ABI имеет значение.   -  person David Heffernan    schedule 27.09.2011


Ответы (2)


Файлы *.dcu в delphi xe2 для приложения firemonkey не зависят от платформ. здесь. как для 32-битных, так и для 64-битных и других операционных систем.

Нет, они не; Delphi XE2 создает разные файлы .dcu для разных платформ, а файлы .dcu для каждой платформы создаются в отдельных папках.

person vcldeveloper    schedule 27.09.2011

Чтобы сделать его несколько более проницательным, немного справочной информации:

DCU представляют собой более или менее комбинацию следующих частей

  1. Объектный код, который представляет собой обычный статически скомпилированный перемещаемый объектный код, точно такой же, как то, что будет генерировать C или C++.
  2. код отладки включительно (вариант Topview, если я не ошибаюсь)
  3. Предварительно скомпилированный заголовок (интерфейс) в той или иной форме.
  4. неспециализированные дженерики в некотором представлении (*)
  5. межблочный встраиваемый код (представление в виде дерева?)

Я не знаю, являются ли все эти 4 отдельными разделами или они чередуются. Я предполагаю, что 1 + 2 объединены (поскольку это позволяет использовать более общие процедуры в компоновщике), и есть «отдых» с 3 + 4 + 5 и, возможно, некоторыми другими метаданными.

Поскольку заголовки могут зависеть от конкретных типов и символов ОС в системных единицах и конкретных единицах ОС, даже теоретически только самые автономные единицы могут быть кроссплатформенными. Наверное, не стоит заморачиваться.

Что касается декомпиляции, то она почти такая же, как и общая проблема декомпиляции, с некоторыми особенностями:

  1. еще не окончательно связанный (объектный) код немного легче декомпилируется
  2. код с прикрепленным кодом отладки немного легче декомпилировать.
  3. однако формат DCU зависит от версии и является собственностью.
  4. весь процесс декомпиляции очень зависит от компилятора и версии.

Короче говоря, это, вероятно, ничуть не проще, чем более ранние компиляторы Delphi или даже статические файлы lib + заголовочные файлы случайного компилятора C++.

person Marco van de Voort    schedule 27.09.2011