dlinyj: (Default)
[personal profile] dlinyj
Вот, вроде много лет занимаюсь программированием. Драйвера всякие ваяю, для контроллеров пишу. Симуятор железа пилил, даже в одной голубой компании работал некоторое время назад, название которой начиналось на "In", а заканчивалось на "tel".
Но столкнулся с тем, что совершенно не понимаю как компилируется программа и как написать программу на си под голый металл. На ассемблере, без проблем. Ассемблер вообще очень простой и понятный язык. Но вот как ту же программу, под голое железо на си написать, всё...

Я молчу, про совершенно упоротый синтаксис AT&T, который разработали бутиратовые наркоманы, но со временем привыкаешь.

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

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

На ассемблере написал, всё булочка. Пытаюсь всё сделать на си, нифига не работает. Как дизассемблировать непонятно. Я ещё архитектуру взял "неудачную", х86. Ну пускай, хочу в реальном режиме сделать, 640 кБ хватит всем. Хочу собрать программу с помощью gcc.

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

Date: 2022-09-23 02:37 pm (UTC)
From: [identity profile] mbr.livejournal.com

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

Date: 2022-09-23 03:07 pm (UTC)
From: [identity profile] mc04kkai9d.livejournal.com
Я для stm32 использовал линкер-скрипты примеров от libopencm3 как костыль. Тут поправил, там поправил; развалилось — вернул все взад, думаем :)

Date: 2022-09-23 03:35 pm (UTC)
From: [identity profile] Николай Замотаев (from livejournal.com)
Кстати если играться с x86 — проще всего брать nasm, у него синтаксис адекватнее ;-)

И по нему есть пачка tutorial-ов, по программированию этого всего (гуглится по имени netwide assembler).

(https://cs.lmu.edu/~ray/notes/nasmtutorial/ просто как первый нагуглившийся пример)

Date: 2022-09-23 07:58 pm (UTC)
From: [identity profile] dlinyj.livejournal.com

С nasm всё легкои просто, и работает из коробки. Не спортивно. А вот gcc, линкер at&t синтаксис, вот где жесть

Date: 2022-09-23 04:17 pm (UTC)
From: [identity profile] johnwarner.livejournal.com
Мне в форточках и вообще в мелкомягких принципиально сама концепция не нравится.
Притом, что привык (когда-то трудилсо на шарагу с началом на микро, а с окончанием на софт).

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

Правда, я был бетатетсером в 90-х, Чикага и 98-я, но то такое.

Date: 2022-11-07 05:13 pm (UTC)
From: [identity profile] slimber-pig.livejournal.com
Один раз думал, что может проще взять и посмотреть отладчиком код сишной проги, чтобы если понадобится можно было его прямо в нех редакторе потом поправить. Вся прога — вывод "хелло" в консоль. Посмотрел, а линкер больше 64 килобайт экзешник собрал.
Стал смотреть — сначала проверка версии ОС, потом проверка доступной памяти, потом 10е прерывание зачем то в вешалке меняет. Короче плюнул, до непосредственно своего кода так и не досмотрел.

January 2026

S M T W T F S
    123
456 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 22nd, 2026 07:00 pm
Powered by Dreamwidth Studios