М.Двач / Программирование

25,4 Мб, mp4,
1920x1080, 0:10
Путь к асемблеру 23 мая, 00:11 3711150 В конец треда | Веб

Мне захотелось научиться программировать как можно ближе к машинному коду. Лет 7 назад я был веб-разработчиком некоторое время, использовал php и js. Все это было просто ради денег. Тогда это было актуально для меня.

В будущем я хочу разобраться с асемблером. Но сразу это будет сложно, поэтому сейчас я знакомлюсь с C++, мне надо писать на нем с минимальным количеством библиотек. Поэтому я начал изучать win32 api.

Что то на win32 api у меня немного получается. Но есть проблема. Я не понимаю смысл, почему в win32 api что то работает именно так или так. Потому что у меня мало знаний в области того как вообще работает компьютер и операционная система.

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

Теперь вопрос. Что мне стоит почитать, что изучить чтобы получить эти знания? Что позволит мне лучше понять почему те или вещи в win32 api и в дальнейшем в низкоуровневом программировании работают так или иначе, что именно надо учитывать.

Стремлюсь к низкоуровневому программированию ради интереса. Как то зарабатывать на этом не планирую да и просто не смогу, даже если захочу. Времени на все это у меня много. Думаю лет 10 есть.

Ответы1177310639214319498968557967842584338451

2 23 мая, 01:36 2 3711177

>>3711150 (OP)
Язык ассемблера в понимании winapi тебе особо не поможет.

sage 3 25 мая, 11:39 3 3712268

Возьми лучше Питон, попробуй на нём пописать относительно низкоуровневые штуки по типу сокетов. Попробуй написать какой-нибудь tcp-сервачок, используя модуль socket на Питоне. Передавай по нему данные. Арендуй где-нибудь vps-сервер, установи на нём свой tcp-сервак и сделай свою личную файлопомойку. Прикрути аутентификацию.
Ознакомься с потоками и процессами, распараллель эту свою tcp-шную хреновину на несколько потоков, или типа того.

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

4 27 мая, 02:15 4 3713106

>>3711150 (OP)
Не еби мозги и просто иди читать Столярова, дальше уже сможешь сам разобраться куда двигаться

5 28 мая, 17:24 5 3713921

>>3711150 (OP)
>Теперь вопрос. Что мне стоит почитать, что изучить чтобы получить эти знания?
Эндрю Танненбаум, Современные операционные системы
Столяров, как советовал анон выше
Windows Internals, Руссинович

6 29 мая, 11:26 6 3714319

>>3711150 (OP)
>почему в win32 api что то работает именно так или так
Потому что люди которые писали эти библиотеки и функции действительно шарят, они прошли тяжелейшие испытания в виде отбора на должность. В отличии от linux, где борцун с системой в обосраных труханах возомнил себя вумным и что-то накалякал.
Ответ:
Это просто пиздато работает, пользуйся и не выёбывайся.

Ответы45664971

7 29 мая, 18:20 7 3714566

>>3714319
В целом верно. Костяк WinAPI писали старики, что начинали инженерить ещё на компах предыдущих поколений. Но в какой-то момент такие люди, знающие винду снизу до верху, в Microsoft закончились. Часть проблем по итогу осталась не решена (пример - дефолтное ограничение полного пути файла на 255 символов). Новички, сколь пиздатыми они не были, не решаются проводить рефакторинг, боготворить их не надо.

Ответы46254971

8 29 мая, 20:47 8 3714625

>>3714566
Как бы я не ругался на винду в целом, но winapi это идеально сделано. Да, есть недоработки вроде ограничения в 255 символов, но это такое..
Я хотел сказать, что это действительно достойный труд и он должен быть защищен и приносить этим людям прибыль, и они сами(уверен) знают цену того что они сделали.
А тут ОП(или я, неважно), а почему это работает именно так?
Да потому что не твоего ума дело(и не моего).
А то привыкли что запросто так им все дают на линуксе.

Ответы4971

9 29 мая, 21:59 9 3714657

> В будущем я хочу разобраться с асемблером. Но сразу это будет сложно, поэтому сейчас я знакомлюсь с C++
Толсто

10 30 мая, 23:12 10 3714971

>>3714319
>>3714566
>>3714625

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

11 31 мая, 00:09 11 3714989

>>3711150 (OP)
Почитай Кетов - внутреннее устройство Линукс. Если будет много не понятного то начни с таненбаума - современные ос. У Кетова ещё есть лекции на ютубе, но там как и в книге очень академический стиль. Это если база нужна о том как работает ос. Если хочешь ещё на уровень ниже Morris - Logic and Computer Design Fundamentals.
Если интересно как работают компиляторы почитай дракончика Compilers: Principles, Techniques, and Tools

12 4 июня, 00:43 12 3716855

>>3711150 (OP)
Есть классические книги по ассемблеру и программированию под win32.
По win32 - это книга Петцольда - Программирование для windows 95
А для ассемблера можешь почитать Зубкова Assembler - язык неограниченных возможностей. Или древнюю книжку Питера Абеля. Ассемблер и программирование для IBM PC. Там везде рассказываются основы.

Но про ассемблер надо понимать главное - что он аппаратно зависим. Ассемблер для x86 это одно. Для Motorola 68K, Zilog Z80, SPARC, MIPS, микроконтроллеров всяких - это всё другое. Так что изучи лучше язык Си, прежде чем соваться к ассемблерам.

Ответы685668596861

13 4 июня, 00:49 13 3716856

>>3716855
А вообще, чтобы экспериментировать с Win32 GUI можно взять C++ Builder (скажем 6.0). Там очень удобно клепать интерфейсы. Удобнее, чем с MFC в Visual C++. MFC ты тоже можешь проштудировать. Есть книжки. На самом деле - мало кто вменяемый в те времена писал на голом Win32 API. Скорее MFC использовали.
А сейчас используют Qt какой нибудь, или wxWidgets.

Ответы68627049

14 4 июня, 00:53 14 3716859

>>3716855
>Зубкова Assembler - язык неограниченных возможностей
Зубкова, кстати, надо ещё поискать полную версию. То, что я находил в интернете - там усечённая версия с неполным материалом.

15 4 июня, 00:57 15 3716861

>>3716855
Я на ассемблере под Z80 развлекаюсь, пишу. Достал себе эмулятор компа на базе Z80, и запускаю под него мои программы. А ещё есть сайт asm80.com. Там прям в отладчике можно прогнать онлайн свою нетленку. Немножко кода какого-нибудь. Дяже ничего ставить не надо. Чисто, в блокнотике у себя на компе пишешь немножко кода, копируешь в браузер и запускаешь.

16 4 июня, 01:00 16 3716862

>>3716856
Кстати чтобы писать на древнем WinAPI лучше использовать Visual C++ 2008 наверное какой. Вместе с локальными библиотеками MSDN тех годов. Они ещё не настолько раскурочены, как нынешние.

Ответы68717049

17 4 июня, 01:54 17 3716871

>>3716862
И да - Win32 API гораздо лучше изложен именно в старых MSDN.

18 4 июня, 12:18 18 3717049

>>3716856
>MFC
Недалеко ушло от WinAPI, делать GUI убожество и головняк. MFC годится разве что как библиотека, для тех же строк, а GUI делали на Дельфи/C++Builder.

>>3716862
Зачем древнее WinAPI когда есть новое с новыми возможностями, старое же никуда не делось. Винда же не линукс, новое не отрицает старое.

Ответы7270

19 4 июня, 17:46 19 3717270

>>3717049
Не, просто на C++ Builder ты навороченную приложуху не наваяешь. И компилятор убогонький, и баги, и вообще функционал ограниченный.
Для крутого софта нужен Visual C++. Что-нибудь из десктопных приложений масштаба MS Word, каких-нибудь 3D Studio MAX, браузер Firefox или Chrome - это всё Visual C++. С MFC или без. На C++ Builder такое не пойдёт.

Ответы7442

20 5 июня, 01:33 20 3717442

>>3717270
Тупые фантазии.
Мс-офис пишется майкрософт на неизвестных внутренних тулкитах.
Браузеры вообще на javascript.

Повторяю, на MFC ничего не напишешь, это портянки гемора как на винапи, бесполезный кал, можно высрать примитивный хеллоуворлд, из приложений только документная модель, диалоги делать не выйдет. Сколько-нибудь серьезное приложение пишется только на VCL, это единственное что доступно публично для работы и не говно, остальное закрыто в крупных фирмах для себя, по сути не существует. Пердольное говно вроде wxwidgets или qt даже не рассматривается, детектор пиздабола.

Ответы74457558

21 5 июня, 01:56 21 3717445

>>3717442
На qt довольно много всего сложного написано, это один из самых популярных UI фреймворков за последние лет 10 точно.

wxwidgets реально мертвая залупа. VCL, MFC, TCL и прочее - это все кал мамонта.

сейчас гуи делается
- электрон (де факто стандарт и много лет как топ1 gui фреймворк для десктопа)
- qt (тоже стандарт)

И на этом по сути выбор кончается. Но при этом еще есть
- целая портянка из swing/awt, javafx, compose multiplatform для java/kotlin
- winforms/wpf для сишарпа + avalonia
- tauri для раста
- wails для Go
- swiftUI для swift/macos

и этот список можно продолжать бесконечно.
в любом случае, какими бы хорошими фреймворки и либы не были - кроссплатформенный UI это очень больно даже в 2026 году.
По сути ситуация стала чуть лучше с появлением электрона и прочих UI фреймворков которые тянут за собой хромиум и v8 движок где нативно рисуют хтмл/цсс/js.
Вот пока что ничего лучше хтмл/цсс/js тупо нет.

Делфи в каком-то смысле был неплох и для своих лет был крайне удобной шуткой. Другое дело что borland сдох, как и embarcadero собственно, ничего нового там уже последние лет 10 наверное не происходило, продукт тупо на поддержке живет чтобы оставшиеся старые энтерпрайз клиенты не разбежались, но в остальном судьба c++ builder, delphi, vcl де-факто давно решена.

Ответы7451

22 5 июня, 04:09 22 3717451

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

Ответы7723

23 5 июня, 11:51 23 3717558

>>3717442
>Мс-офис пишется майкрософт на неизвестных внутренних тулкитах.

Прочти внимательнее, что я написал. Office пишется с применением Visual C++ с MFC или без. Если на внутренних тулкитах - то без MFC. Про это я и написал. Впрочем, ранние версии Office скорее использовали MFC, я полагаю.

>Браузеры вообще на javascript.
А про браузеры - я открываю исходники Chrome и вижу C++.

Основная моя мысль была - что на C++ Builder ты софт такого уровня не напишешь. Непосильно это.

Ответы75807693

24 5 июня, 12:26 24 3717580

>>3717558
> на C++ Builder ты софт такого уровня не напишешь. Непосильно это.

Написать-то можно, только VCL тут скорее будет мешать, чем помогать.

Ответы8387

25 5 июня, 15:15 25 3717693

>>3717558
>А про браузеры - я открываю исходники Chrome и вижу C++.
Всё что нужно знать про еблана не понимающего даже на чем браузер написан. Отсюда и такие же тупорылые домыслы про "полезный MFC" и "бесполезные Дельфи/Сибилдер". Бабки на лавочке болтали, а еблан шел мимо и краем уха слышал, вот и повторяет.

Ответы8388

26 5 июня, 15:41 26 3717723

>>3717451
Припекло то как. Остужай.

27 5 июня, 18:59 27 3717843

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

Ответы79507991

28 5 июня, 23:51 28 3717950

>>3717843
>>Сначала конечно туго идет
ты про свою попку?

29 6 июня, 05:22 29 3717967

>>3711150 (OP)
> как можно ближе к машинному коду
Бери ФОРТ http://www.forth.org.ru/ язык проще некуда, очень близко к асемблеру, есть примеры на русском как писать под winapi

Ответы8281

30 6 июня, 07:23 30 3717991

>>3717843
>Сейчас ещё ботохуета помочь может
Но не написать весь код

55 Кб, 851x314
31 6 июня, 07:32 31 3717993

Ботохуита запуталась в байтоёбстве

32 6 июня, 10:34 32 3718031

Хочу учить С++ и winApi, мнение?
мимо джава господин

Ответы80598282

33 6 июня, 12:30 33 3718059

>>3718031
Учи, разрешаю.

34 6 июня, 22:17 34 3718281

>>3717967
>очень близко к асемблеру
Где вы-дебилы нахватались этой галиматьи?

35 6 июня, 22:21 35 3718282

>>3718031
Зачем а главное нахуя?

36 7 июня, 07:11 36 3718387

>>3717580
Неа. Функционал того же Билдера 6.0 слабенький. Там например нет даже настройки Pre-Build, Post-Build steps. Не поддерживаются makefiles. Скудные настройки компилятора и проч. сборки.
А ещё VCL там не поддерживает Unicode. Это вообще позор.

37 7 июня, 07:12 37 3718388

>>3717693
Ну так открой и почитай исходники Хрома, ё маё.

38 7 июня, 10:43 38 3718425

>>3711150 (OP)
>Встречаются мне регулярно понятия такие как - поток, ядро, дескрипторы
>Windows Internals
В таких книгах про это пишут. Или про внутрянку линухов книги.

Ответы84338451

130 Кб, 1170x1100
39 7 июня, 11:03 39 3718433

>>3711150 (OP)
>>3718425
Ну вообще там если поверхностно, то все просто:
поток - можно сказать единица исполнения. Т.е. кусок кода, расположенный в памяти и на регистрах проца. ОСь и проц, умеют жанглировать потоками - типа менять их местами, с сохрарненим данных, магически, как фокусники. Здесь не помешает понимаение выполнения ф-й на ассемблере. Все из-за регистров (стэка и других), которые нужно сохранять и восстанавливать.
ядро - ну эта сама ОСь и драйвера. Они крутится в защищенной области памяти, куда нет доступа (если не использовать дыры), обычным программам (играм и браузерам и т.п.). ОСь и дрова, имеют прямой доступ к железу. Еще драйвера, могут так поднасрать, что мало не покажется. Поэтому, опасно ставить таблетки на базе гипервизора. И поэтому на винде, можно без бубна, установить только подписанные (с соглашения m$) драйвера.
* дескриптор - любой объект ядра, имеет идентификатор - дескриптор. Файл, сокет, область памяти, семафор, мутекс, поток.. Когда ПО (браузер или видеоплеер) открывает файл, то ОСь открывает файл, а в юзерспес ПО отдает только его дескритор (handle (DWORD)). Ну и если надо в файл что-то записать или прочитать, то ПО через ф-ю, обращется к ОСи -
запись_в_файл(дескриптор, буфер_в_памяти, смещение и всякие парметры). ОСь берет находит нужный файл по дескриптору и пишет в него из памяти. Кстати, при обращении к системным ф-ям (т.е. ф-ям ОСи) происходит переключение контекста - т.е. переключение из режима юзерспеса (когда проц вертит код юзерского ПО), на режим, когда проц вертит код ядра или драйверов. Это сделано для безопасности и отжирает время. Поэтому такие расходы стараются минимизировать. Например писать в файл сразу буфер из памяти, а не по байту. Ну и есть более современные приемы.

Но если ты будешь писать прикладное ПО, глубокое понимание таких процессов, тебе пригодится, в 99% случаев, только чтобы получить одобрение, от какого-нибудь ботана, на собеседовании и вкатиться в конторку. Далее, будешь использовать популярные фреймворки по перекладыванию json-ов. :)

130 Кб, 1170x1100
39 7 июня, 11:03 39 3718433

>>3711150 (OP)
>>3718425
Ну вообще там если поверхностно, то все просто:
поток - можно сказать единица исполнения. Т.е. кусок кода, расположенный в памяти и на регистрах проца. ОСь и проц, умеют жанглировать потоками - типа менять их местами, с сохрарненим данных, магически, как фокусники. Здесь не помешает понимаение выполнения ф-й на ассемблере. Все из-за регистров (стэка и других), которые нужно сохранять и восстанавливать.
ядро - ну эта сама ОСь и драйвера. Они крутится в защищенной области памяти, куда нет доступа (если не использовать дыры), обычным программам (играм и браузерам и т.п.). ОСь и дрова, имеют прямой доступ к железу. Еще драйвера, могут так поднасрать, что мало не покажется. Поэтому, опасно ставить таблетки на базе гипервизора. И поэтому на винде, можно без бубна, установить только подписанные (с соглашения m$) драйвера.
* дескриптор - любой объект ядра, имеет идентификатор - дескриптор. Файл, сокет, область памяти, семафор, мутекс, поток.. Когда ПО (браузер или видеоплеер) открывает файл, то ОСь открывает файл, а в юзерспес ПО отдает только его дескритор (handle (DWORD)). Ну и если надо в файл что-то записать или прочитать, то ПО через ф-ю, обращется к ОСи -
запись_в_файл(дескриптор, буфер_в_памяти, смещение и всякие парметры). ОСь берет находит нужный файл по дескриптору и пишет в него из памяти. Кстати, при обращении к системным ф-ям (т.е. ф-ям ОСи) происходит переключение контекста - т.е. переключение из режима юзерспеса (когда проц вертит код юзерского ПО), на режим, когда проц вертит код ядра или драйверов. Это сделано для безопасности и отжирает время. Поэтому такие расходы стараются минимизировать. Например писать в файл сразу буфер из памяти, а не по байту. Ну и есть более современные приемы.

Но если ты будешь писать прикладное ПО, глубокое понимание таких процессов, тебе пригодится, в 99% случаев, только чтобы получить одобрение, от какого-нибудь ботана, на собеседовании и вкатиться в конторку. Далее, будешь использовать популярные фреймворки по перекладыванию json-ов. :)

Показать весь текст
Ответы84519438

122 Кб, 937x949
40 7 июня, 12:17 40 3718451

>>3718425
>>3718433
>>3711150 (OP)
какие нахуй книги
гитхаб.ру/виндовс_нт_слитые_исходники
и пошёл читать как деды складывали дворды в уме и неистово ебашили событийную архитектуру
в актуальных окнах поменялось примерно нихуя

41 9 июня, 15:13 41 3719438

>>3718433
У Зубкова в книге по ассемблеру приводится пример, как можно организовать многопоточное выполнение программ. Вот буквально приводится код, который организует жонглирование вот этими вот потоками. Манипуляции по переключению стека. Плюс приводятся сведения про всякие там организации системных вызовов ОС - все эти Гейты, Ловушки, переключения контекста и прочая. Про прерывания тоже рассказывается.

Обновить тред
« /pr/В начало тредаВеб-версияНастройки/a//b//mu//s//vg/Все доски

Скачать тред только с превьюс превью и прикрепленными файлами

Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах.Подробнее

Пользуетесь скринридером — пишите, что можно улучшить.
Host-Food.ru — надёжный хостинг от 12 руб/мес | Free DNS
Зеркала М.Двача: m2ch.hk, m2ch.lib, m2chfapiswfw2wcakptqp4o6ltgchvjuxfab7urxlduraomtlnhw5xad.onion