LINUX.ORG.RU
ФорумTalks

узнать размер бинарника до компиляции

 ,


0

0

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

ВОПРОС: можно ли подсчитать размер будущего бинарника, имея исходный текст, не пользуясь компилятором, но зная все его алгоритмы?

★★★★★

Последнее исправление: teod0r (всего исправлений: 2)

Это такой хитрый способ заставить людей пытаться доказать равенство классов P и NP?

Tark ★★
()

как узнать жив кот или нет, не открывая коробки?

вам хочется очень странного.

beastie ★★★★★
()

мне кажется, что через libastral или надо знать искодный код/особености компилятора.

cetjs2 ★★★★★
()
Ответ на: комментарий от Tark

я ничего не пытыюсь доказать, просто интересно, можно ли предугадать всего лишь размер кода, до его компиляции, не важно как и какими методами/алгоритмами.

teod0r ★★★★★
() автор топика

провести конпеляцию на эталонном доверенном(обязательно с красивым сертификатом) сервере.

Bad_ptr ★★★★★
()
Ответ на: комментарий от cetjs2

я же писал что код есть! особенности работы и все специфакации компилятора и алгоритмы тоже даны

teod0r ★★★★★
() автор топика
Ответ на: комментарий от Bad_ptr

провести конпеляцию на эталонном доверенном(обязательно с красивым сертификатом) сервере.

а откуда ты знаешь что его компилятор был скомпилирован чистым компилятором? никому нельзяжоверять

teod0r ★★★★★
() автор топика
Ответ на: комментарий от Tark

+1 ;)

было кстати где-то доказательство (лень искать), что perl — NP и его статистичесий анализ невозможен.

beastie ★★★★★
()
Ответ на: комментарий от teod0r

а откуда ты знаешь что

мысли в твой мозг не транслируют инопланетяне.И они могут заставить думать тебя о том, о чём они захотят. Вот сейчас они захотели посмотреть очередную серию комедийной басни 'человек и паранойя'.

Bad_ptr ★★★★★
()
Ответ на: комментарий от cetjs2

римерно можно определить, наверное.

я то думал что хотябы информатика является точной наукой...

teod0r ★★★★★
() автор топика

можно ли подсчитать размер будущего бинарника

Естественно. Только приблизительно. Современные архиваторы пакуют программы до ~8-15%.

vahtu
()
Ответ на: комментарий от cetjs2

или как-то скомпилировать без компилятора, без оптимизаций, но используя алгоритмы компилятора?

teod0r ★★★★★
() автор топика
Ответ на: комментарий от vahtu

Современные архиваторы пакуют программы до ~8-15%.

а высчитать и скомпилировать без упаковок?

teod0r ★★★★★
() автор топика
Ответ на: комментарий от teod0r

я ничего не пытыюсь доказать, просто интересно, можно ли предугадать всего лишь размер кода, до его компиляции, не важно как и какими методами/алгоритмами.

Хрен знает что он инлудит и сильно зависит от опций компилятора.

Tanger ★★★★★
()
Ответ на: комментарий от teod0r

Хм. Сам же и ответил:

высчитать

тебе нужен калькулятор...

скомпилировать

и много-много-много-много-много свободного времени.

vahtu
()
Ответ на: комментарий от teod0r

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

P.S. В лихом детстве я умудрялся (просто ради забавы) кодом в пару килобайт, порождать исполняемые файлы под 20-30 мб :) Шаблоны - такая веселая штука..

qrck ★★
()
Ответ на: комментарий от Deleted

было бы печально эсли никто никогда не провкрял что на самом деле крутится на мировых серверах, а вдруг там руткиты везде?

teod0r ★★★★★
() автор топика
#include <stdio.h>
#include <sys/stat.h>

int main(int argc, char **argv) {
    struct stat st;
    stat(argv[0], &st);
    
    if (st.st_size = 5852)
        printf("%s:%d байт\n",argv[0],st.st_size);
    return 0;
}

gcc example.c && ./a.out

chinarulezzz ★★
()

выполни исходный код компилятора на системе, где нет бэкдора. в крайнем случае - вручную

KivApple ★★★★★
()
Ответ на: комментарий от teod0r

Вдруг только кролики плодятся :}

Deleted
()
Ответ на: комментарий от teod0r

я же сказал - если такой системы нет - компилируем вручную.

ну а если и себе вы не доверяете, то остаётся только убиться.

KivApple ★★★★★
()
Ответ на: комментарий от teod0r

там руткиты везде

Ну да. Если бы «руткиты» не админили сервера, то про какие-то фантастические «взломы» ты узнавал бы из очередных исследований британских учоных. :)

vahtu
()

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

легко - собираешь, записываешь размер на руке и возвращаешься в прошлое, убиваешь себя «старого», после избавления от трупа (чтоб не лез с вопросами) смотришь на руку - там записано, программа до сих пор не конпелялась, результат «налицо»

shty ★★★★★
()
Ответ на: комментарий от teod0r

В данном случае есть сходство.

Deleted
()
Ответ на: комментарий от teod0r

Если отключить все оптимизации, знать как компилятор компилирует все конструкции и знать конкретную платформу под которую компилируется, то можно прикинуть размер бинарика. Но с оптимизациями и в зависимости от платформы размер бинарика может отличаться в разы.

Tark ★★
()
Ответ на: комментарий от Tark

Если отключить все оптимизации, знать как компилятор компилирует все конструкции и знать конкретную платформу под которую компилируется, то можно прикинуть размер бинарика

вот это и хотелось услышать. просто хочется простого быстрого решения избавиться от паранои убедиться в чистоте будущей системы

teod0r ★★★★★
() автор топика
Ответ на: комментарий от teod0r

На мой взгляд легче взять какой-нибудь ac100 и проверить все бинарики антивирусом(что-нибудь типа clamav) на нем. Сами они все равно под arm не запустятся, и навыков особых не нужно чтобы это сделать.

Tark ★★
()
Ответ на: комментарий от teod0r

вот это и хотелось услышать. просто хочется простого быстрого решения избавиться от паранои убедиться в чистоте будущей системы

это тебе никак не поможет. Вполне возможно добавить вредоносный код не изменяя размера результирующего файла.

dikiy ★★☆☆☆
()
Ответ на: комментарий от shty

легко - собираешь, записываешь размер на руке и возвращаешься в прошлое, убиваешь себя «старого», после избавления от трупа (чтоб не лез с вопросами) смотришь на руку - там записано, программа до сих пор не конпелялась, результат «налицо»

? :)

seed_stil ★★
()
Ответ на: комментарий от dikiy

Вполне возможно добавить вредоносный код не изменяя размера результирующего файла.

но тогда нарушится работоспособность программы

teod0r ★★★★★
() автор топика
Ответ на: комментарий от teod0r

но тогда нарушится работоспособность программы

:) естественно я имел в виду добавить вредоносный код так, чтобы размер не изменился, и работоспособность не нарушилась.

dikiy ★★☆☆☆
()

самый простой способ — компиляция.

Можно использовать другой компилятор с теми же алгоритмами и оптимизациями, но кто гарантирует, что gcc не выдаст слегка другой выхлоп?

DoctorSinus ★★★★★
()
Ответ на: комментарий от dikiy

добавить вредоносный код так, чтобы размер не изменился, и работоспособность не нарушилась

и как же это может быть?

teod0r ★★★★★
() автор топика
Ответ на: комментарий от teod0r

Код размещаешь в «дырках», возникающих из-за оптимизации компилятором. Делаешь темные делишки. Возвращаешь управление в нормальную точку старта.

vahtu
()
Ответ на: комментарий от teod0r

но тогда нарушится работоспособность программы

В структуре испольняемых файлов полно «пузырей» пустых, необходимых для выравнивания границ секций по размеру стараницы например (так потом проще работать с файлом через mmap например), так что записать - можно найти куда, если разбить вредоносный код на кусочки мелкие. Такой трюк емнип еще легендарный WinCIH умел проделывать - заражал не увеличивая размера виндовых PE

qrck ★★
()
Ответ на: комментарий от teod0r

не совсем понял, но первый раз специально можно компилять без оптимизаций

дырки в коде есть всегда - это раз.

Два - вирус может некоторую часть кода просто сжать.

три - вирус может найти места, которые он сам сможет соптимизировать в коде, а на освободившееся место запишет себя.

я уверен, что есть еще over100500 способов это сделать.

dikiy ★★☆☆☆
()
Ответ на: комментарий от Deleted

Да, вполне может быть, под досом это вроде будет чуть сложнее, т.к. exe досовский - не такой «выровненный», хотя кто знает. Одно могу точно сказать - .com файлы исполняемые так уже точно нельзя было заразить :) Там лишних байтов обычно не было ни одного

qrck ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.