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

C язык программирования #777 clang /clang/ 14 апр, 20:48 3430902 В конец треда | Веб

18 Кб, 235x250348 Кб, 640x389

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

Пожалуйста, пользуйтесь https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит или ∗.

Что читать:

- Stephen Prata "C Primer Plus, 6th Edition" (2014) (в русском переводе: Стивен Прата "Язык программирования C. Лекции и упражнения (6-е издание)" ): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Идеально для начинающих.
- Brian Kernighan, Dennis Ritchie "The C Programming Language".
- Стандарт ISO/IEC 9899:1999 (C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- Черновик стандарта ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2479.pdf (февраль, с диффами)
- Последний черновик ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2583.pdf (октябрь)

Прошлый тред: https://2ch.hk/pr/res/3386488.html (М)

Ответы7068

2 15 апр, 08:56 2 3431159

Попалось такое:

typedef struct foo {
int bar;
int baz;
} foo_t, ⚹pfoo_t;

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

Ответы1175

3 15 апр, 09:24 3 3431175

>>3431159
Ну типо, тут две дефениции:
foo_t обозначает псевдоним для struct foo
А pfoo_t означает псевдоним для struct foo⚹ т.е. тип указатель на эту структуру.
Зачем нужен указатель на структуру? Хз, наверное чтобы компилятор не ругался, и чтобы лишний раз преобразования типов не делать. Ясно что все указатели хранят адрес, т.е. один и тот же тип, поэтому никаких проблем нет чтобы присвоить к обычному void ⚹ наш struct foo⚹. Однако после такого присвоения мы уже не можем корректно обратиться к значению по адресу, потому что непонятно что за тип там лежит. Нужно этот воид привести к структфуу и тогда обратится. Может автор кода решил избежать этих преобразований и заранее слелал тип "указатель на структуру". Яхз

Ответы1298

4 15 апр, 12:15 4 3431298

>>3431175
>Ну типо, тут две дефениции

Точняк. Я привык, что

struct foo {
int bar;
int baz;
} fooi;

где fooi - обычный экземпляр. А тут через typedef сразу несколько алиасов повесили. Можно там еще через запятую добавить указатель на указатель ⚹⚹ppfoo_t и т.д. Пиздец, ну и синтаксис.

Ответы1334

5 15 апр, 12:56 5 3431334

>>3431298
Но это разные вещи. Тут ты:
struct foo {
int bar;
int baz;
} fooi;
Создаешь тип "struct foo" и обьявляешь, получается что, глобальную переменную fooi.

А с директивой typedef ты переменных не создаёшь, ты создаёшь синонимы для типов. Т.е.
typedef struct foo {
int bar;
int baz;
} fooi;
после этого у тебя нет доступа к fooi, потому что fooi - это тип. Нужно ещё создать переменную типа fooi.
Например:
fooi a = {1,0};

Вопрос только, нахуя ему тип ⚹pfoo_t? он ведь может просто ⚹foo_t написать.

77 Кб, 850x989
6 16 апр, 23:58 6 3432737

Я пришёл сюда с двумя тезисами:

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

Ответы27492805

7 17 апр, 00:12 7 3432749

>>3432737
> Только на сишке и плюсах можно писать софт, убивающий людей. Никакая другая "платформа", "экосистема" - не позволяет этого делать.
Товарищ-си, здравствуйте! Вы имеете в виду компьютерное зрение на дронах? Всякие numpy безусловно содержат в себе под капот дизассемблированные плюсы для вычислений перемножения матриц и другой математики, но это всё ещё Питон.
Или Вы про то, что уча "низкроуровневое" программирование хочется вздёрнуться и убить себя? Тогда я с Вами согласен, у меня депрессия и апатия.

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

Ответы27692881

48 Кб, 774x1014
8 17 апр, 01:15 8 3432769

>>3432749
>Товарищ-си, здравствуйте! Вы имеете в виду компьютерное зрение на дронах? Всякие numpy безусловно содержат в себе под капот дизассемблированные плюсы для вычислений перемножения матриц и другой математики, но это всё ещё Питон.
Я знал, что кто-то прибежит рассказывать про машинное зрение, но:

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

2. Можно взять OpenCV, который в целом почти полностью плюсы. И на его основе общаться с полётником.

3. Большая часть существующего софта, убивающего людей, про машинное зрение даже не слышало. А это - наши любимые микрушечки в MQ-9 Reaper, системах ПВО вроде S-300, ПТУРах, самонаводящихся патронах в .50 BMG которые пилит американское DoD, системы наведения в бомбах, микроконтроллеры для теплочувствительных матриц, fly by wire в самолётах, и наконец, обыкновенный софт для полётных контроллеров. Бжж-бжж, motherfucker. Я даже не буду говорить про возможность бабахнуть чего-нибудь тремя или пятью вольтами. Ну, ладно, здесь можно и интерфейс накалякать на реакте, и css-префиксов понакидать на кнопочку, таких, чтобы я её хотел сначала лизнуть, а потом нажать. А потом ещё раз лизнуть.

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

Ответы27702958

9 17 апр, 01:25 9 3432770

>>3432769
>>3432769
В том числе, а ты про что? Преобразование типов и указателей, работа с кучей?

Ответы2775

10 17 апр, 01:36 10 3432775

>>3432770
Типы, указатели, контейнера. Преобразования из структур в байты и обратно. Если мы не можем уследить за данными, и это приводит к багам, может и пишем-то мы не слишком сознательно?

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

11 17 апр, 06:50 11 3432805

>>3432737
>софт, убивающий людей
Ножами и вилками тоже убивают.

12 17 апр, 10:50 12 3432881

>>3432749
> Сложно
Нет. Большинство каличей не итт оп пикрл как бы намекает , на в ей борде да и вообще везде сдабо понимают что такое память и указатели. Да ось не даст тебе убить себя, но логику программы это никак не защитит.

Ответы2882

13 17 апр, 10:51 13 3432882

>>3432881
Про пик мимо. Думал это плюсотред, там пик рилейтед.

14 17 апр, 12:08 14 3432958

>>3432769
>сегфолты
Какое же дно пиздец, сегфолт - это благо и хорошо.

Ответы3388

343 Кб, 471x477
15 17 апр, 18:21 15 3433388

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

-Сычёв, какого хуя у тебя код рандомно сегфолится, хули ты там настрочил, ищи ошибку мудень
-Кабан кабаныч, вы не понимаете, сегфол - это хорошо а не плохо! Это означает можно экстренно завершить программу, а не ждать 30 минут, пока мой говнокод завершится.

Ответы35333837

16 17 апр, 21:15 16 3433533

>>3433388
А я поддержу товарища-Си выше и скажу, что мне тоже нравятся сегфолты, они значат, что ты набедакурил что-то в памяти и куда-то не туда залез, а значит область кода сужается и легче найти ошибку с указателями.

Ответы3619

17 18 апр, 00:46 17 3433619

>>3433533
Но сегфол это не ошибка компилятора С. Это ошибка операционной системы. Ты и на асме можешь наговнокодить и получить сегфол. Это получается плюс в репку разработчикам ОС и mmu что не допустили багов в виртуальной памяти.

И искать причину сегфола не так то и просто, особенно на параллельных программах. Надо изначально знать что пишешь.

Ответы3628

18 18 апр, 01:35 18 3433628

>>3433619
Эх, до параллелизма я так и не дорос, слишком быдло, товарищ-Си, признаю Ваше превосходство.

19 18 апр, 10:57 19 3433826

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

Ответы4109

20 18 апр, 11:19 20 3433837

>>3433388
Малолетний долбоёб, если сегфолта нет, то это ещё не означает, что всё заебись, а если случился эксепшон, то это очень хорошая новость.

Ответы4109

21 18 апр, 15:43 21 3434109

>>3433826
Да кто тебя из твоей шараги отчислит, фантазер. На первом курсе что ли?

>>3433837
>а если случился эксепшон
Долбоеб это ты. Исключение обраьатывает ОС. Если твоя долбоебская ОС не способна защитить тебя от нарушения целостности памяти - значит ставь нормальную ОС, не знаю на что за хуйне ты сидишь. При чём тут С вообще? Это ОС и нужно отслеживать сегфоллы, а С тут не причем. При утечки памяти, например, твоя ОС начнёт вырубать все процессы подряд. Это тоже "Очень хорошо и продкмано" по твоему? Нет, это называется "я долбоеб написал кал, а операционная система от этого кала рыгает". Хорошие ошибки - это только ошибки и предупреждения компилятора, потому что они позволяют устранить неполадку до запуска, ещё и с указанием проблемного места.

Ответы4127

22 18 апр, 15:56 22 3434127

>>3434109
Тупорылое дерьмо, нахуй ты вообще пишешь, если не понимаешь о чём вообще говоришь?

Ответы4153

23 18 апр, 16:31 23 3434153

>>3434127
Ну расскажи что ты думаешь, раз считаешь что прав.

24 19 апр, 17:39 24 3435114

Какие сишные проекты считаются самыми лучшими в плане качества и красоты кода?

Ответы513451595647

25 19 апр, 17:58 25 3435134

>>3435114
Kaspersky OS.

26 19 апр, 18:42 26 3435159

>>3435114
https://github.com/id-Software/DOOM

Ответы5245

27 19 апр, 20:55 27 3435245

>>3435159
>скидывает хакнутую-перехакнутую дольбильню

Ответы5255

28 19 апр, 21:02 28 3435255

>>3435245
Скидывай свои варианты, мы только рады будем.

409 Кб, 669x603
29 19 апр, 23:56 29 3435339

И чё делать-то на C?

Я точно не хочу покупать и паять ардуинки? У меня есть если что, но я её один раз запрогал и забил. Разбираться что не так двадцать часов а потом узнать что просто диод пробило или кондёр, не, я это уже проходил на работе сотни раз, меня тошнит от хардварных проблем, в большинстве случаев они вызываны хуёвой закупкой компонентов или если в нашем чипе RTL нахуевертили неудачно.

Можно ли себя развлекать на C и получать нормальные знания владея только лишь компьютером и виртуалкой (мне в линуксе удобнее вести разработку, но на домашний комп ставить не хочу).

Ну научусь я сортировать эффективно массивы, обрезать строки, формировать, структуры, эмбедить asm вставки, жонглировать поинтерами и теребить алоки малоки. Делать-то что? На чём набивать руку чтобы стать неебаться эмбедед? Только интститут и вкат через практику?

Ответы5344534653795647

30 20 апр, 00:04 30 3435344

>>3435339
raylib

31 20 апр, 00:06 31 3435346

>>3435339
А где в России топ специальности для низкого уровня? Я думаю, что только топовое ИБ направление, где на парах анализируют исполняемые файлы, да и то только курс, а может только семестр.

Ответы5647

32 20 апр, 03:21 32 3435379

>>3435339
Эмбеддед хрен знает, но для фана сижу пишу на raylib и Dear IMGUI всякие поделки для себя, очень интересно.

33 20 апр, 12:49 33 3435647

>>3435114
>красоты кода
Нахуй иди сразу.
>>3435339
>стать неебаться эмбедед
В ембедед сишка не является тут предметной областью. Если нужны проектики для практики, напиши дисковую базу.
>>3435346
>в России
Ебало?

34 20 апр, 14:46 34 3435740

78 Кб, 1280x49375 Кб, 1096x494

Каво блядь???! Вот тебе и гсс под шиндус. На фряхе такого нет.

Ответы578857915802584458556072

35 20 апр, 16:11 35 3435788

>>3435740
Ты используешь модификатор ll для 32битного значения...

Ответы6579

36 20 апр, 16:22 36 3435791

>>3435740
Какая версия у gcc?

Ответы5792

37 20 апр, 16:26 37 3435792

34 Кб, 788x45380 Кб, 1182x934

>>3435791
Я в душе не ебу, что у тебя там за версия компилятора, но на 14.2 всё без говна.

12 Кб, 951x662
38 20 апр, 16:40 38 3435802

>>3435740
У меня предположение только в том, что старый printf обрабатывал переменные по адресу так, что он видел модификатор для long long и обрабатывал сразу переменную a, b. Скинул загруженные в стэк переменные для примера.

Ответы5843

39 20 апр, 17:41 39 3435843

>>3435802
А вот теперь хз, даже мой самопальный _print_hex_ нормально обрабатывает данные https://pastebin.com/upmduS3c.

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

Ответы5844

40 20 апр, 17:42 40 3435844

>>3435843 mailto: >>3435740

Ответы5859

40 Кб, 1618x539
41 20 апр, 18:01 41 3435855

>>3435740
Как-то так, а дальше уже только в ассемблере копаться и смотреть какое соглашение о вызове функции стоит, stdcall или cdecl. В общем надо думать, а думать я больше не могу, прости, товарищ Си, я пошёл думать о том, что моя вайфу меня никогда не полюбит.

Ответы5860

61 Кб, 931x382
42 20 апр, 18:04 42 3435859

>>3435844

Ответы58605862

51 Кб, 1849x527
43 20 апр, 18:06 43 3435860

>>3435855
Господи, я насрал себе в штаны, вот поэтому моя вайфу меня и не любит, простите меня, товарищи Си, теперь точно ушёл грустить и плакать. Вот исправленная картинка.
>>3435859
Прости, товарищ Си, я ушёл, давай через пару часов?

Ответы5862

44 20 апр, 18:10 44 3435862

>>3435859
Короче, я пишу этот пост и точно ухожу, прошу тебя, замени 11 строчку на эту printf("%lx x %lx = %llx\n", a, b, c);

И скажи стал ли вывод лучше.

Я ушёл плакать по своей вайфу. Всё о чём я думал и свои предположения я уже написал, прости, если не помог, я честно пытался, прости... >>3435860

Ответы5918

45 20 апр, 18:44 45 3435918

>>3435862
Да, вывод стал нормальным.

Ответы6004

46 20 апр, 19:48 46 3436004

>>3435918
Что тебе ещё надо? Я больше не способен тебе помочь...

Ответы6010

47 20 апр, 19:57 47 3436010

>>3436004
Учись! А то отчислят! Меня вон уже отчислили... С 6 курса, с дипломом магистра.

Ответы6021

48 20 апр, 20:13 48 3436021

>>3436010
У меня сложная тема диплома, я не могу вывезти, товарищ Си... Зачем я её выбрал, довыёбывался...

Товарищ Си, а если Вы уже получили диплом, то почему не догадались в чём проблема кода? Или это была проверка на адекватов в треде?

Ответы60346090

49 20 апр, 20:22 49 3436034

>>3436021
Или в результате проверки Вы поняли, что я долбаёб, пиздец. ПОЧЕМУ ПОСТОЯННО ТАКИЕ ВОПРОСЫ, НА КОТОРЫЕ НЕТ ОТВЕТА, Я НЕ МОГУ ТАК ЖИТЬ!

50 20 апр, 21:04 50 3436072

>>3435740
Товарищ Си, здравствуйте, сайт сделал диззассемблер Си кода https://godbolt.org/z/GzhfsKWso
Я скомпилировал и слинковал код с использованием MASM32 https://pastebin.com/NEKE4BDF

И судя по всему это не вина ОСи Виндоус, и даже не вина компилятора, ибо он предупреждения делает, это Ваша вина, товарищ Си.

Товарищ Си, мне очень грустно, я бы хотел, чтобы моя вайфу меня любила, но она не любит меня, мне очень-очень грустно...

Ответы6094

50 Кб, 500x500
51 20 апр, 21:19 51 3436090

>>3436021
>Товарищ Си, а если Вы уже получили диплом, то почему не догадались в чём проблема кода?
Во-первых потому что я получил диплом на инжинера АСУ ТП. Программировать нас не учили. Разве что ПЛК на языке релейных схем. А во вторых, я своим дипломом жопу подтираю. Лучше бы на работу пошел. Вроде столько времени в лабораторные всрал - в итоге на рынке труда я ниже школьника без знаний.

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

Ответы6111

52 20 апр, 21:24 52 3436094

>>3436072
>ибо он предупреждения делает, это Ваша вина, товарищ Си.
Он не делает предупреждений. В глаза что ли долбишься. Причём тот же код на фрибсд работает нормально!!! Ану сьеби уроки учить школота блиядь.
К слову причем тут дизассемблер ДЕБИЛ. Ты не сможешь за дизассеблить код с виднды, потому что на Винде нет полноценной библиотеки Си. На Винде твой printf вызывает ConsoleWriteA, а тот в свою очередь вызывает NtDeviceIoControl. Давай назуй, задисассемблируй мне эту хуйню из kernelbase.dll.

Ответы611165726734

53 20 апр, 21:25 53 3436095

Ладно извини. Я пьяный. Праздную день рождение Гитлера

Ответы61016111

556 Кб, mp4,
640x1138, 0:13
54 20 апр, 21:29 54 3436101

>>3436095

55 20 апр, 21:42 55 3436111

>>3436090
> инжинера АСУ ТП
Да тут программирование + физика + схемотехника, вы должны быть умнее всех!
>спамишь кринжевыми товарищами си,
Я уважаю всех товарищей по Си, вы мне братья!
> тебя ждет голод и всеобщее обомсывание и обхаркивание
Я знаю, товарищ Си, я знаю.

>>3436094
> Он не делает предупреждений.
Потому что надо -Wall -Wextra -Wpedantic прописывать, товарищ Си.
> нет полноценной библиотеки Си
Я не знаю, что вызывает WinAPI, но выглядит максимально прохладно и кажется, что Вы меня обманываете.
> Давай назуй, задисассемблируй мне эту хуйню из kernelbase.dll.
А вот это зря, данный компилятор диззассемблирует код на основе UNIX систем, Вы точно уверены, что он нормально отработал на BSD?

>>3436095
Эх, товарищ Си, как же я ненавижу НСов, пиздец.

Я к Вам с добротой отнёсся, пытался искренне Вам помочь, а Вы меня последними бранными словами наградили. Теперь мне очень сильно грустно, я ушёл плакать, Вы плохой человек, товарищ Си.

Ответы61136125

56 20 апр, 21:43 56 3436113

>>3436111
данный диззасембер *godbolt.

57 20 апр, 21:57 57 3436125

>>3436111
>Да тут программирование + физика + схемотехника, вы должны быть умнее всех!
Умный, по горшкам дежурный, нах. Я денег бы хотел, а не чтобы анон на двачах назвал меня умным.

>я ненавижу НСов, пиздец.
Я не НС. Я гитлер.

>Вы точно уверены, что он нормально отработал на BSD?
Да. Сто процентов. Могу показать даже. То что я под виндой компилю - это виртуалка.

>Вам помочь, а Вы меня последними бранными
Ну соре все дела. Пынямать надо. День рождение Гитлера как ни как.

Ответы613261616525

58 20 апр, 22:00 58 3436128

Гитлер злой и обиженный неудачник.. но в то же время художник и романтик! Литерали ми!

59 20 апр, 22:03 59 3436132

>>3436125
Ебать, на моего одного знакомого похожи, правда он себя открыто НС называл, но с Гитлером себя тож сравнивал, Вы идеалист или материалист?

Ответы6267

60 20 апр, 22:52 60 3436161

>>3436125
Давайте скидывайте.

61 21 апр, 08:10 61 3436267

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

Ответы6377

62 21 апр, 10:48 62 3436377

>>3436267
>Нигде в мире так не говорят.
Так они там и писать/читать не умеют, нашел с чем сравнивать

63 21 апр, 12:36 63 3436525

>>3436125
Если бы ты был реально умным, то давно бы чего да добился, а ты просто хуесос с огромным ЧСВ, который думает, что за факт его существования ему все должны.

Ответы6543

64 21 апр, 12:47 64 3436543

>>3436525
>Если бы ты был реально умным, то давно бы чего да добился, а ты просто хуесос с огромным ЧСВ, который думает, что за факт его существования ему все должны.
Чё сказать хотел, долбоёб?

Ответы6551

65 21 апр, 12:48 65 3436546

Нормально ли использовать указатели для решения любой задачи на C?
Например, нужно найти количество вхождений подстроки в строке. Я беру указатель и присваиваю ему значение strstr(строка, подстрока) и засовываю его в цикл while, проверяя чтобы он не был равен NULL. После нахождения вхождения я увеличиваю указатель на 1 (сдвигаю на следующую ячейку памяти), после чего цикл повторяется.
Эту задачу можно решить без указателей? Вообще это не считается болезнью, что теперь при решении любых задач я думаю про ячейки памяти и указатели?

Ответы65696583

66 21 апр, 12:59 66 3436551

>>3436543
Я уже всё сказал, хуйло метиловое.

Ответы6569

217 Кб, 512x451
67 21 апр, 13:15 67 3436569

>>3436551
попкукал что-то обиженка и сдрыснул

>>3436546
код неси, не понятно. Но вообще вот
>вхождения я увеличиваю указатель на 1 (сдвигаю на следующую ячейку памяти)
так типо часто делают на с. Я бы предпочёл всё же скобочкаими это оформалять [] потому что это понятнее. Но разницы особо нет.
> Вообще это не считается болезнью, что теперь при решении любых задач я думаю про ячейки памяти и указатели?
Нет. Это как раз так сказать "парадигма" языка С, то что тут именно что байтоёбство и размышление в контексте байтов. Это как раз правильный подход. Вот мыслить категорями высокоуровневых яп это как раз вредно, например структуры пихать в качестве аргументов функций итд.

Ответы65796580

68 21 апр, 13:19 68 3436572

>>3436094
> Ты не сможешь за дизассеблить код с виднды, потому что на Винде нет полноценной библиотеки Си
Что? Я вообще нихуя не понял, это как? А .exe из-за святого духа работают? А компилятор объектники как делает?

> На Винде твой printf вызывает ConsoleWriteA, а тот в свою очередь вызывает NtDeviceIoControl
А это интересно уже. Лучше бы про это рассказал, а не про хуйню какую-то, про системные вызовы, что printf под капотом вызывает в винде, что в юниксах.

Только это всё ещё ты виноват, что код не работает, ты если бы нормально с компилятором умел работать, то увидел бы, что он предупреждения делает. Да и под винду у новых компиляторов такой проблемы нет.

Ответы6585

69 21 апр, 13:25 69 3436579

>>3436569
Тебе первым же сообщением >>3435788, кстати, ответили, хуйло метиловое.

Ответы6585

70 21 апр, 13:25 70 3436580

>>3436569
Ленивый выблядок, которого турнули из магистратуры, а он сюда пришёл ныться, пошёл в жопу, хуесос, ты мразь и гандон.

Ответы6585

71 21 апр, 13:27 71 3436583

>>3436546
>Нормально ли использовать указатели для решения любой задачи на C?
Да.
>Эту задачу можно решить без указателей?
Да.
>это не считается болезнью, что теперь при решении любых задач я думаю про ячейки памяти и указатели?
Нет.

72 21 апр, 13:28 72 3436585

>>3436572
>Что? Я вообще нихуя не понял, это как? А .exe из-за святого духа работают? А компилятор объектники как делает?
Нихуя не понимаешь, да? Вот и молчи

>>3436579
Эти все предупреждения роли не играют, дятел. Число "с" там longlong, что соотвествует llx (long long hex).
К слову, на FreeBSD всё исправно работает. Пиздец долбоёб, увидел предупреждение и молится на него. Читать ты конечно же это предупреждение не читал.

>>3436580
утютю

Ответы65936734

73 21 апр, 13:32 73 3436593

>>3436585
Ты долбаёб или что? Ты же про CRT слышал и ещё пиздишь, что на винде нельзя дизассмеблировать Си код, ты буквально это и написал, скотина слепая.

> llx (long long hex)
Покажи мне такой тип hex, хуесосина, это флаг для форматного вывода, который работает с переменной как с безнаковой, пидор ты ебанный.

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

Ответы6596

74 21 апр, 13:37 74 3436596

>>3436593
>Ты долбаёб или что? Ты же про CRT слышал и ещё пиздишь, что на винде нельзя дизассмеблировать Си код, ты буквально это и написал, скотина слепая.
У тебя на винде код целиком и полностью на dll-ках работает. Даже с ключами -static. Если ты это не понимаешь - ну ты идиот.
>Покажи мне такой тип hex, хуесосина, это флаг для форматного вывода, который работает с переменной как с безнаковой, пидор ты ебанный.
Вай вай вай, какой умный малыш. И тебя не волнует что я long long hex нигде даже типом не назвал. Это расшифровка.
>всё твоя вина, криворукая залупа.
Соре, я не разработчик GCC, ты ошибся

Ответы6598

75 21 апр, 13:42 75 3436598

>>3436596
Блять, а какой процесс на любой ОСи может работать без использования dll/so, если тебе в любом случае придётся взаимодействовать с железом через ОСь, даже если ты просто программу напишешь, в которой не будут подключаться библиотеки, ты про что говоришь, блять, сука ебанная.

Ответы6600

76 21 апр, 13:44 76 3436600

>>3436598
>Блять, а какой процесс на любой ОСи может работать без использования dll/so, если тебе в любом случае придётся взаимодействовать с железом через ОСь
Через системные вызовы, порридж!!! Напрямую, через програмные прерывания, таблицу системных вызовов можно работать с обьектами ядра. И на windows это работает точнно так же. Если ты дизасемблируешь ntdll, то ты там не найдёшь ссылок на другие библиотеки. Ого, эво как да? А вот так, там чистые сисколы используются.

Ответы6602

77 21 апр, 13:46 77 3436602

>>3436600
Напиши мне прогу которая в регистр EAX записывает 0xffff и делает возврат и, чтобы не было библиотек от ОСи.

Ответы6604

47 Кб, 160x160
78 21 апр, 13:50 78 3436604

>>3436602
>Напиши мне прогу которая в регистр EAX записывает 0xffff и делает возврат и, чтобы не было библиотек от ОСи.

mov eax, 0xffff
ret

та-дааам.

Ответы6607

3 Кб, 232x110
79 21 апр, 13:54 79 3436607

>>3436604
Угу, и по твоему ОСь не прилинкует сюда либы? Ну, ладно...

Я тебя не понимаю, ты на что опираешься? По моим подозрениям на том Танненбаума по ОСям.

Ответы66106611

80 21 апр, 13:58 80 3436610

>>3436607
>Угу, и по твоему ОСь не прилинкует сюда либы?
Какие либы? ret, mov - это всё мнемоники команд процессора, для них не нужны никакие либы.

Ответы66116614

81 21 апр, 13:59 81 3436611

>>3436607
>>3436610

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

Нихуя я блять тебя не понимаю, нихуя, блять.

Какую мне книгу прочитать, чтобы я понял, что ты, блять, пишешь?

Ответы66126615

82 21 апр, 14:00 82 3436612

>>3436611
Мы не говорим о BIOS и прошивках сейчас, мы говорим о коде в контексте ОСи.

83 21 апр, 14:05 83 3436614

>>3436610
А как ОСь должна понимать с каким ядром ты работаешь?
Я тебя не понимаю, вообще, блять, не понимаю.
Какую книгу мне надо прочитать, чтобы я тебя понял?

Ответы6620

441 Кб, 1280x593
84 21 апр, 14:05 84 3436615

>>3436611
>Блять, ну, невозможно даже код на ассемблере написать, чтобы он не использовал kernel32 на винде, ибо там как раз эти ебучие сисколы.
Теоретически - возможно. Практически - все эти сисколы не задокументированы, и непонятно как они работают. Даже разработчики wine и ReactOS не всё знают. Поэтому, на винде можно пользоваться только kernel32.dll, потому что это последнее на что есть инфа.

Вот на скрине функция которая в конце концов использует сискол. Но что он делает - я так и не смог догадаться. Нужно знать как устроена windows чтобы понять как правильно использовать этот сискол. Я только PEB смог правильно интерпритировать. И то на угад.

Ответы6618

85 21 апр, 14:09 85 3436618

>>3436615
Какую книгу мне надо прочитать, чтобы я тебя понял???
???
???
???

Ответы6620

86 21 апр, 14:12 86 3436620

>>3436614
>А как ОСь должна понимать с каким ядром ты работаешь?
Она и не должна понимать. Ядро находится на 0 уровне. Когда ты совершаешь сискол, ты буквально даёшь процессору команду оторваться от юзермода и выполнить что-то из режима ядра. В режиме ядра по-идее всё архаично как на MS DOS, поэтому там всё работает по протоколу ядра - т.е. если ты что-то сделаешь неправильно, никто тебя об этом не предупредит. Протокол типо вот регистр eax нужен для того чтобы номер системного вызова передать - соглашение такое.

>>3436618
я хз.

Ответы6627

87 21 апр, 14:16 87 3436627

>>3436620
Откуда ты эти знания подчерпнул?

Ответы6631

88 21 апр, 14:18 88 3436631

>>3436627
столярова прочитал, попрограммировал немного

Ответы6633

89 21 апр, 14:20 89 3436633

>>3436631
Какая книга Столярова или цикл книг? Про ОСи? Почему так сложно дать название? В какой программе код учился дизассемблировать?

Ответы66356639

90 21 апр, 14:22 90 3436635

>>3436633
учился код дизассемблированный читать*

91 21 апр, 14:25 91 3436639

>>3436633
>В какой программе код учился дизассемблировать?
Ghidra, бесплатная, кросплатформенная и довольно неплохо дизассемблирует
>Какая книга Столярова или цикл книг? Про ОСи?
Там просто "введение в профессию". Помоему у него других книг и нет (а те что есть - старьё ненужное). Второй том, помоему, после изучения С, идёт более подробный обзор устройства unix.
>учился код дизассемблированный читать
Не учился специально, просто смотрю чё там написано. Если адреса есть - значит это код дизассемблированный, если нет - значит это полезная информация всякая от гидры. Покопался немного, посмотрел как форматы PE .exe выглядят как система загружает программу. Вроде ничего больше не читал особо. Работу надо искать, а не байтоёбствовать.

Ответы6643

92 21 апр, 14:32 92 3436643

>>3436639
Понял, спасибо, ладно, сорри, что бугуртил. Спасибо, что расписал, но мне кажется, что ты меня троллишь.
А у него реально в книге про Си о кольцах защиты расписано? Что-то не верится, если честно.

Ответы6651

41 Кб, 640x480
93 21 апр, 14:44 93 3436651

>>3436643
>А у него реально в книге про Си о кольцах защиты расписано? Что-то не верится, если честно.
Нет, там только общая информация. Но да, там обьяснено что такое "защита памяти" "юзерспейс" и зачем оно вообще нужно. Про кольца я слышал задолго до прочтения этой книги, но во всяких роликах мне затирали, что якобы "юзерспейс" нужен для "безопасности", что вот злые хакеры хотят попасть в ядро и похитить память, а защита памяти якобы защищает от этих хаккеров. У меня всегда это вызывало критику, потому что это звучит как бред. Ну и не только звучит, это и есть бред. Вот у столярова пояснено, что "защита памяти", по сути защищает компьютер от самого себя, а не от кого-то другого. Ведь на нулевом уровне всё просто и логично, до тех пор, пока не возникают парралельные процессы. Все же ОС сейчас многозадачные, никто не сидит на MS-DOS, поэтому появляются такие сущности как "параллелньые процессы", ну и их всех надо умело размещать в памяти, с учётом того, что каждый из них может в любой момент завершится. И ведь если всё складывать просто в "плоскую" абсолютную память, то появляется "фрагментация". т.е. процессы просто могут в шахматном порядке встать и заполонить всю память. Более того, процессы могут "разростаться" и аллоцировать больше памяти". Поэтому в реальности, абсолютная память забивается в случайном порядке, а процессы, видят сконвертированную на "страницы" память из mmu. Таким образом. получается сделать абстракцию в виде "гибкой" памяти, которую можно в любой момент выделить и освободить. И всё это само собой накладывает ограничения в виде необходимости не допустить ошибок. Поэтому и появляются разные кольца "защиты". Вприципе, можно сделать многозадачную ОС и на нулевом кольце защиты вон TempleOS, например. Но это не то, чтобы что-то работоспособное.

94 21 апр, 16:13 94 3436734

>>3436585
Слушай, а если всё таки возващаться, то что ты имел в виду под
>>3436094
> не сможешь за дизассеблить код с виднды, потому что на Винде нет полноценной библиотеки Си

Ответы6796

95 21 апр, 17:03 95 3436796

>>3436734
Я имел ввиду, следующее: вот есть так называемая "стандартная библиотека С", откомпилированная статично libc.a и динамично libc.so. Функции в ней для ввода вывода типо printf используют системный вызов write (0x4), который собственно пишет информацию в стандартный поток вывода (stdio). Ты можешь откомпилировать unix-программу с флагом -static, и получить полностью самостоятельный машинный код, не содержащий в себе никаких зависимостей от динамических библиотек. То есть, если версия libc изменится, или вовсе если перекинуть эту программу на ОС без libc, то она запустится и будет работать. Собственно, при декомпиляции этой программы, ты можешь отследить какие системные вызовы она использует, и как этот код детально работает через дебаггер.
Вот только в винде ситуация другая. На винде нет таких элементов ядра как "стандартный поток вывода", на винде потоки устроены иначе. Более того, то как винда устроена - не задокументированно. Никто кроме разработчиков microsoft не знает как использовать системные вызовы. Следовательно, как работает printf на винде? Он на самом деле иммитирует работу printf, средствами winapi. То есть, стандартная библиотека под windows представляет собой Trunk-функции для windows-api и не более того. Как я уже говорил, printf вызывает WriteConsoleA, а та в свою очередь вызывает NtDeviceIoControl. Поэтому, даже когда ты с ключем --static компилируешь программу под винду, статично зашиваются все библиотеки кроме стандартной. На винде нет статичных версий библиотек ntdll (она даже называется dll лол). Поэтмоу, когда ты дизасемблируешь виндоусовскую программу - ты не видишь в ней ничего, кроме основного её функционала и ссылки на winapi. То есть, таким образом, портирование программы лишено смысла, потому что её релальный функционал проще изобрести самому - он находится на поверхности, его не сложно разработать с нуля, а остальной функционал отсутствует - он находится в динамических библиотеках.
Ну и тогда, само собой, могут появляться ошибки в выводе, потому что ничего не известно о том как винда обрабатывает буферы для вывода информации.

95 21 апр, 17:03 95 3436796

>>3436734
Я имел ввиду, следующее: вот есть так называемая "стандартная библиотека С", откомпилированная статично libc.a и динамично libc.so. Функции в ней для ввода вывода типо printf используют системный вызов write (0x4), который собственно пишет информацию в стандартный поток вывода (stdio). Ты можешь откомпилировать unix-программу с флагом -static, и получить полностью самостоятельный машинный код, не содержащий в себе никаких зависимостей от динамических библиотек. То есть, если версия libc изменится, или вовсе если перекинуть эту программу на ОС без libc, то она запустится и будет работать. Собственно, при декомпиляции этой программы, ты можешь отследить какие системные вызовы она использует, и как этот код детально работает через дебаггер.
Вот только в винде ситуация другая. На винде нет таких элементов ядра как "стандартный поток вывода", на винде потоки устроены иначе. Более того, то как винда устроена - не задокументированно. Никто кроме разработчиков microsoft не знает как использовать системные вызовы. Следовательно, как работает printf на винде? Он на самом деле иммитирует работу printf, средствами winapi. То есть, стандартная библиотека под windows представляет собой Trunk-функции для windows-api и не более того. Как я уже говорил, printf вызывает WriteConsoleA, а та в свою очередь вызывает NtDeviceIoControl. Поэтому, даже когда ты с ключем --static компилируешь программу под винду, статично зашиваются все библиотеки кроме стандартной. На винде нет статичных версий библиотек ntdll (она даже называется dll лол). Поэтмоу, когда ты дизасемблируешь виндоусовскую программу - ты не видишь в ней ничего, кроме основного её функционала и ссылки на winapi. То есть, таким образом, портирование программы лишено смысла, потому что её релальный функционал проще изобрести самому - он находится на поверхности, его не сложно разработать с нуля, а остальной функционал отсутствует - он находится в динамических библиотеках.
Ну и тогда, само собой, могут появляться ошибки в выводе, потому что ничего не известно о том как винда обрабатывает буферы для вывода информации.

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

96 21 апр, 23:09 96 3437068

>>3430902 (OP)
> в русском переводе

^ Ничего не изменилось, Если вам нужен русский перевод - вы идете нахуй

97 22 апр, 00:39 97 3437086

>>3436796
>На винде нет статичных версий библиотек ntdll (она даже называется dll лол).
ntdll это ядро, ты собрался ядро статически вкомпилировать в приложения, чтобы они работали мимо ядра, ебанат?
Если в линуксе так делают, значит там ядро говно, нихуя не реализовано, вот и костыляют функционал внешними библиотеками. Естественно такое говно ни с чем не совместимо, приходится компилировать отдельно на каждое ведро со своими костылями.
>Ну и тогда, само собой, могут появляться ошибки в выводе, потому что ничего не известно о том как винда обрабатывает буферы для вывода информации.
Винда - графическая ОС, консоль там для совместимости с DOS только, то есть не нужна, для обмена данными существуют другие механизмы, всё документировано. Лезешь в винду не понимая что это такое кукарекая зашоренные предрассудки.

Ответы7087

98 22 апр, 00:41 98 3437087

>>3437086
Товарищ Си, а что Вы посоветуете почитать, чтобы понять и осознать Вами написанное в полной мере? Таненбаум про ОСи подойдёт?

Обновить тред

« /pr/В начало тредаВеб-версияНастройки

/a//b//mu//s//vg/Все доски

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

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

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