LINUX.ORG.RU

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

 


4

3

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


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

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

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

но процессор понимает машинные команды. поэтому я и хочу сразу писать в них

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

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

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

будет смотреть ячейки под рентгеном

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

Ещё магия должна быть aa55 в конце…

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

В самой короткой линуксовой программе, как известно, ни байта кода:

touch true ; chmod +x true; ./true || echo yes ; ./true && echo no; wc ./true
no
0 0 0 ./true

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

 readelf -l ./test

Elf file type is EXEC (Executable file)
Entry point 0x8048080
There are 2 program headers, starting at offset 52

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x000000 0x08048000 0x08048000 0x000a2 0x000a2 R E 0x1000
  LOAD           0x0000a4 0x080490a4 0x080490a4 0x00009 0x00009  W  0x9007b900
vM ★★
()
Ответ на: комментарий от anonymous

ты какую задачу-то решаешь?

учусь программировать.

Что хочешь получить на выходе ?

базу. низкоуровневую. предвосхищаю вопрос

зачем?

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

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

учусь программировать.

You are doing it wrong. Нормальные программисты никогда на машинных кодах не пишут. Машинный код нужен разве что авторам компиляторов, ассемблеров и процессоров.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)

Нахрена? Хочешь низкого уровня - бери vhdl и прочие аппаратные вещи. А ты занимаешься ручным изготовлением резиновой бабы.

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

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

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

Угу.

Надо только из хексдумпа в бинарник переписать, и ещё у меня в записи 16битные слова, а не байты, если перепутаешь местами байты в словах — ничего не заработает.

А зачем тебе ssd? Попробуй сначала на виртуалке.

luke ★★★★★
()

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

Нужно уметь компилировать в уме, т.е. знать наизусть какие машинные коды порождают команды ассемблера.
Собственно, в далеком 1985г. нас так учили ассемблеру i8080. Сначала на бумаге составляли коротенькие проги на ассемблере, в уме компилировали и записывали машинные коды на бумаге. Затем на отладочном комплексе тумблерами набирали каждый код и запускали пошагово. Все данные на шинах отображались светодиотами.

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

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

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

Сделай как @sigurd сказал: напиши прогу на ассемблере, потом с использованием вот этой вот таблички переведи руками в hex коды: https://csiflabs.cs.ucdavis.edu/~ssdavis/50/8086%20Opcodes.pdf

Вот ещё табличка: https://en.wikipedia.org/wiki/X86_instruction_listings

luke ★★★★★
()
Последнее исправление: luke (всего исправлений: 1)
Ответ на: комментарий от Assembler

получается что программирует компилятор а не я

Не получается. Вы не понимаете роль программиста.

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

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

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

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

Надо только из хексдумпа в бинарник переписать

что Вы подразумеваете под бинарником? файл .bin ? тут ребята говорили что это не нужно. видимо file.img в нем наш код написанный нулями и единицами и заливает на ssd с помощью dd. что не так я сделаю если поступлю таким образом?

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

Сделай как @sigurd сказал

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

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

ну мне на должность хорошего программиста не стоит претендовать. поэтому можно делать всякую ересь. все равно это все только для себя. ну и для поднятия настроения форумчан.

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

Надо сначала циферки что я набрал перевести в бинарный формат, ибо циферки-то набраны с помощью ascii символов, то есть грубо говоря ‘0’ — это 48 (http://www.asciitable.com/). Лучше делать это с помощью программ, например, xxd. Она тебе сделает бинарный файл из hexdump. Потом надо сделать dd на твоё устройство.

Только это, у тебя BIOS или EFI?

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

знать наизусть какие машинные коды

не. надо уметь строить машинные инструкции. но опкоды помнить да, нужно наизусть. опкоды, но не целые машинные инструкции....

Нужно уметь компилировать в уме

а вот это золотые слова.

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

Там Haiku никто переносить на RISC-V не планирует?

Я в том числе для этого свою мини-ОС пишу (в теме есть скриншот, текстовый режим не нужен). Там уже работают потоки с вытеснением и таймеры. Ещё осталось сделать виртуальную память и режим пользователя с системными вызовами и будет понятно как это же сделать для Haiku. В отличии от ARM, там понятная спецификация железа и есть относительно простой эмулятор с читабельным кодом TinyEMU. В ARM я так и не понял какой там таймер и контроллер прерываний. И где вообще про это читать.

Сборка для RISC-V уже налажена.

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

но опкоды помнить да

Не во всех процессорах есть внятные опкоды. Попробуйте посмотреть например на ARM/Thumb, там месиво из бит вперемешку с данными и номерами регистров, а не опкоды.

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

т.е. удалённого управления через cli там не будет.. > /dev/null

Не будет, потому что это мини-ОС, создаваемая в экспериментальных и учебных целях. Доводить её до полноценной ОС не планируется.

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

ok.

111000......  // часть машинной инструкции
раз .word деректива ассемблера, то да, она не нужна. 100% нужное замечание которое избивило меня от того, что я бы тупил сутки. тогда беру '1' и перевожу ее . ее код в ascii 49. 49 в двоично виде будет
0110001
беру '0' он 48. перевожу 48 в двоичный формат
01100000
и так весь код. правильно?

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

ARM/Thumb

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

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

говорили что это не нужно. видимо file.img в нем наш код написанный нулями и единицами и заливает на ssd с помощью dd. что не так я сделаю если поступлю таким образом?

Это слишком долгий и окольный путь размещения нужного кода в RAM, доступной процессору. Вы пытаетесь с помощью сторонних программ записать байты на SSD, вместо того, чтобы напрямую писать в RAM.

Как будто Вы пишете в тетрадке или на листочке контрольную, сдаёте на проверку, и через неделю узнаёте, что что-то пошло не так.

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

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

Нет.

У тебя сначала есть твоя запись в виде 00011110 для каждого байта. В данный момент в реальности в файле записано 48, 48, 48, 49, 49, 49, 49, 48. Тебе же нужно всё это сжать до значения 00011110 то бишь 30. Делать это надо с помощью xxd -r, только это для hex.

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

Ну кстати можно какой-нибудь редактор hex кодов использовать…

luke ★★★★★
()
Последнее исправление: luke (всего исправлений: 1)
Ответ на: комментарий от vM

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

А есть эмулятор такого компуктера? Я вот только для БЭСМ-6 видел

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

Я бы лично рекомендовал попробовать в DOSBox поиграться с debug программой.

Вот примерное описание: https://montcs.bloomu.edu/Information/LowLevel/DOS-Debug.html

Тут по-идее можно RAM самому в hex-кодах менять и запускать своё творчество

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

я не знаю как его туда поместить без OC.

А Вы на SSD без ОС собрались записывать? Главное – то, что нужный Вам код в оперативную память записывает Ваша программа. А она всегда выполняется в определённой программно-аппаратно-микропрограммной среде в архитектурных рамках ISA и ABI этой платформы.

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

реальности в файле записано 48, 48, 48, 49, 49, 49, 49, 48

понятно) спасибо.

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

После прошивки от автора топика — только программатор

Ни разу ещё не видел, как ТС что-то вообще доводил до хоть какого-нибудь завершения.

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

А Вы на SSD без ОС собрались записывать?

ну да. ssd будет пустым. занулю его. после возьму переходник подключу зануленый ssd к usb другого пк c LINUX найду зануленый ssd в

lsblk
и запишу с помощью dd. програмку с машиннном коде и после воткну ssd в ПК и включу питание.

Assembler
() автор топика
Последнее исправление: Assembler (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.