LINUX.ORG.RU

hello word без компилятора

 


5

3

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


 10e88 15000000 00000000 00000000 00000000  
 10e98 03000000 00000000 e80f0100 00000000  
 10ea8 02000000 00000000 60000000 00000000  
 10eb8 14000000 00000000 07000000 00000000

или так не получится?

Ответ на: комментарий от torvn77

Без ассемблера можно обойтись. И многие компиляторы никогда не переводили код в текст для ассемблера. Но функции всё равно придётся реализовывать: конструирование инструкций, адресная арифметика, при необходимости формирование объектного модуля в нужном формате.

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

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

нет. ну я думаю вы и сами это знаете.

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

Пропустил пунктуацию

xxd -p -r -> by <<BYE
7f454c46020101034279652c61736d0a02003e0001000000280008000000
00003c00000000000000b208b001be080008000f05cc4000380001004000
010000000500000000000000000000000000080000000000000040000000
000078000000000000007800000000000000001000000000000000000000
BYE
chmod +x by
vM ★★
()
Ответ на: комментарий от torvn77

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

Так?

printf '/bin/false\0' | dd of=binary conv=notrunc bs=1 seek=$((0xabcdef)) 

или так?

echo 2f62696e2f66616c736500 | xxd -p -r -s $((0xabcdef)) - binary
vM ★★
()
Ответ на: комментарий от anonymous

после пары роликов на ютубе, пошёл тренд писать без компиляторов и ассемблеров.. но это нонсенс

Это не нонсенс, это вполне похвальное стремление людей разобраться в основах. Ну вот зачес люди приёмники паяли, когда вполне готовые уже можно было купить? Вот это — из той же серии. И это хорошо, на самом деле.

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

но в свете последних событий я уже не знаю

Каких событий? Чего ты не знаешь? Это темы про отпуск Линуса и раздутая вокруг них истерика на тебя так повлияли?

Успокойся. Даже если торговая марка Linux попадёт в руки каких-то нехороших людей (а такое в бизнесе, конечно же, бывает), лицензия всегда позволяет сделать форк. Да, разумеется, вопрос, а потянет ли сообщество? Но это уже вопрос к сообществу, свои «программы без ОС» ты точно так же можешь не потянуть.

Вот сам Линус в JFF специально для тебя написал (уже лет 20 как написал):

Не существует «официальной» версии Linux. Есть моя версия и версия любого другого. Но большинство доверяет моей и опирается на нее как на де-факто официальную, потому что они видели, как я над ней девять лет работал. Именно я все это затеял, и людям мой вариант, как правило, нравится. Но предположим, я выбриваю на голове число зверя – 666 – и говорю: «Поклоняйтесь мне, ибо иначе истреблю вас!» Все просто рассмеются мне в лицо и скажут: «Тогда мы займемся этим ядром сами».

И далее:

А однажды, лет через двадцать, кто-то вдруг скажет: «Ну, все – хватит!» и создаст свою собственную операционную систему, например Fredix ( Или Diannix – уж как получится. Будем надеяться, что за 20 лет мужчины перестанут наконец доминировать в компьютерной области.). Без всей этой исторически сложившейся нагрузки. Именно так и должно быть.
Но я особенно горжусь тем, что, когда на сцену выйдет Fredix, мир уже будет иным. Linux прежде всего показала, что все можно делать по-другому, что с помощью открытых исходников можно опираться на достижения других людей. Открытые исходники существовали давно, но именно Linux довела эту идею до всеобщего сознания. Поэтому Fredix не придется начинать все с нуля.
То есть мир стал чуточку лучше.

Короче, Линус специально всё разжевал бог весть когда.

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

Наши серьезные ответы - насмешка над невежеством модератора. А его бездействие - насмешка над наивными комментаторами. Твой коммент - тонкое оскорбление статуса кво, а мой - рекурсивная метаирония над собой. Это же лор, глубже надо быть.

В квотезы!

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

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

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

У меня в сапоге полудюжины ламп в упаковке. Но мне лень их проверить в деле.

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

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

Что за ролики такие?

anonymous
()
Ответ на: комментарий от hobbit

Каких событий?

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

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

А это какой формат?

hd vmlinuz | head
00000000  4d 5a ea 07 00 c0 07 8c  c8 8e d8 8e c0 8e d0 31  |MZ.............1|
00000010  e4 fb fc be 40 00 ac 20  c0 74 09 b4 0e bb 07 00  |....@.. .t......|
00000020  cd 10 eb f2 31 c0 cd 16  cd 19 ea f0 ff 00 f0 00  |....1...........|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 82 00 00 00  |................|
00000040  55 73 65 20 61 20 62 6f  6f 74 20 6c 6f 61 64 65  |Use a boot loade|
00000050  72 2e 0d 0a 0a 52 65 6d  6f 76 65 20 64 69 73 6b  |r....Remove disk|
00000060  20 61 6e 64 20 70 72 65  73 73 20 61 6e 79 20 6b  | and press any k|
00000070  65 79 20 74 6f 20 72 65  62 6f 6f 74 2e 2e 2e 0d  |ey to reboot....|
00000080  0a 00 50 45 00 00 64 86  04 00 00 00 00 00 00 00  |..PE..d.........|
00000090  00 00 01 00 00 00 a0 00  06 02 0b 02 02 14 70 d5  |..............p.|
vM ★★
()
Ответ на: комментарий от torvn77

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

Не всегда. Как компилятор спроектируешь, так и будет.

Можно сразу генерировать машкод.

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

https://github.com/smellslikekeenspirit/an-askreddit-list-of-compsci-books/blob/master/Randal%20E.%20Bryant%2C%20David%20R.%20O%E2%80%99Hallaron%20-%20Computer%20Systems.%20A%20Programmer%E2%80%99s%20Perspective%20%5B3rd%20ed.%5D%20(2016%2C%20Pearson).pdf

Вот отличная - Randal E. Bryant, David R. O’Hallaron - Computer Systems. A Programmer’s Perspective [3rd ed.] (2016)

3-е издание идет под x86_64, 1-2 - x86 кажись

Exac
()
Ответ на: комментарий от vM

BIOS – программа, которая читает то, что нужно, в оперативную память. Эту программу кто-то написал с помощью компиляторов, ассемблеров, компоновщиков, программаторов и т.п. Напишите свою программу, которая считает в оперативную память и выполнит то, что нужно. Без ассемблеров.

Ну, биос вшит в материнку, видимо, для него это удовлетворяет критерий «писать под почти-голое железо»

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

На моей рабочей машине этот вшитый биос иногда по одному разу в месяц перепрошивается.

Автор объяснил, что в этой теме для него самое главное - без компиляторов.

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

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

пока что воспользуюсь помощью bios. а в идеале нужно мне написать для машины на которой нет ни ОС ни компилятора и bios тоже видимо будет отсутствовать.

Название темы не совсем корректное, там ТС еще без ассемблера обойтись хочет, но вот помощь вшитого бивиса, похоже, - подходящий уровень абстракции этой задачи, хоть и не идеал. А ясен пень можно залезть и поглубже в пайку своих микросхем. Каждый выбирает посильный себе минимум абстракции, кому-то Сишка, кому-то электроника

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

Чем-то похож уровень для хелловорлдов: образов секторов для BIOS и статических ELF для linux без библиотек. Каким-то чудом код оказывается в RAM и можно писать приветы системными вызовами и функциями BIOS.

t20
()
Ответ на: комментарий от Assembler

На самом деле в машкодах бывает интересно потворить чисто для тренировки. Я этим занимался ещё в школе на ПМК (там коды, правда, были более высокоуровневые) ну и немного в 20 лет уже на 8080. Но потом это надоедает.

Так что с одной стороны, я твой интерес понимаю. Любопытно же.

С другой стороны, сейчас меня не только машкоды, но и «обычный» ассемблер, с мнемониками, из которых эти машкоды делают, не особо интересует. Программируя на ассемблере, ты прибиваешь свою программу к определённой процессорной архитектуре. Написал что-то для интел/амд — для арма это придётся уже переписывать с нуля. А сейчас идёт определённая движуха и с мипсами, и с RISC-V, надеюсь, будет весело. Задолбал этот интел со своей монополией. Хотя по производительности за разумные деньги у интела/амд конкурентов по-прежнему нет, если я не ошибаюсь…

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

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

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

Судя по истории тем, Assembler ещё Haskell’ем интересовался.

t20
()
Ответ на: комментарий от X512

Где-то я это уже слышал…

Hello everybody out there using minix -

I’m doing a (free) operating system (just a hobby, won’t be big and professional like gnu)…

anonymous
()

Зачем это делать если такая убунту на ядре 5.6.0 уже есть ?

anonymous
()
Ответ на: комментарий от vM

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

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

Кажется даже до меня доперло что подразумевает ТС. Его спрашивают почему без асемблера он отвечает потому что без помощи компилятора и поясняет что использовать ассемблер без компилятора не может так как асемблер это лютая мнемоника и процессор просто не может ее понять. А он хочет ближе к железу и в машинных кодах и без компилятора. Но он не говорит что без компилятора значит без асемблера так как это одно и тоже. Это уже вы извращаете на свой лад.

anonymous
()
Ответ на: комментарий от vM

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

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

Тактика примитивна и отработана десятилетиями.
С 30-х годов Гитлер насаждал мнение, что немцев все страны обижают и Германию в целом.
И далее призывал объединиться и дать отпор всем врагам.

Ныне куда пальцем не ткни эту тактику применяют и в политике, и … в чем угодно.

Главной в ней создать образ ВРАГА от которого нужно защититься.

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

ну конечно, как что, так сразу гитлер. этой тактикой 100% ещё древние люди пользовались, все племена обижают наше

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

Очевидные вещи не всем понятны, господин анонимус.

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

Используйте file, чтобы определить формат самостоятельно без чьей-либо помощи. Познайте радость магии чисел («магические числа» - это технический термин такой, на котором основана работа утилиты).

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

Используйте file

Спасибо! file vmlinuz

vmlinuz: Linux kernel x86 boot executable bzImage, version 4.15.0-20-generic (buildd@lgw01-amd64-039) #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018, RO-rootFS, swap_dev 0x7, Normal VGA
vM ★★
()
Ответ на: комментарий от vM

Например, в тех случаях,

так вот я и спрашиваю, что это за случаи, для которых нужно учитывать выравнивание в с++ ?

x905 ★★★★★
()

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

Зависит от того, какой степени чистота эксперимента требуется.

Для начала, можешь написать обычное приложение для своей любимой ОС, но все вручную.

Для этого создаешь пустой файл hello.exe. Открываешь его в hex-editor, и вручную набиваешь в нем содержимое PE-файла под кносоль, выводящего «Привет, мир!» . Естественно, с полпинка это не получится, для этого придется сесть и изучить формат PE-файла, как напечатать в консоль строку (по сути, какую функцию импортировать из API ОС), все это составить в тетрадке, потом перевести в машинный код для x86/x64 .

Ну и далее, в порядке усложнения:

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

  2. сам бивис на флешке, который настраивает железо и видеокарту в особенности, и выводит строку в режиме VESA.

  3. тот же бивис на флешке, но выводящий строку не в режиме VESA, а например, полностью программируя видеокарту. Хотя хз, получится ли, так как производители видеокарт могут совать палки в колеса, например, вводя проверку цифровой подписи.

так как до этого момента мы код хотя и прописывали вручную, но все равно для доставки использовали различный софт, переходим ко следующему шагу:

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

Еще ниже - эксперименты с FPGA. Еще ниже - создание своего проца со всей обвязкой, требуемой для его запуска. Например, создание клона 6502 - в нем содержится несколько тысяч вентилей.

Tinker
()
Ответ на: комментарий от x905

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

anonymous
()
Ответ на: комментарий от EXL

Эмоджи курсивом - не знал что и такой изврат уже существует в браузерах =)

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

К нормальному железу будущего легаси-говно-ос не будут применимы. Бесполезная трата букв.

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