169 похожих чатов

Снова этот оффтоп про С... В чате С не говорят

столько про ассемблер, сколько в чате по ассемблеру говорят про С. Не стыдно?

45 ответов

103 просмотра

Я бы с удовольствием поговорил про макросы фасма

Си это почти ассемблер.

КТ315- Автор вопроса
КТ315
Нет.

Сказали два человека подряд, оба не знают Си.

s54820
Сказали два человека подряд, оба не знают Си.

Не то чтобы я совсем его не знаю, но я знаю достаточно, чтобы сказать, что это и близко не асм

КТ315- Автор вопроса
s54820
Сказали два человека подряд, оба не знают Си.

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

КТ315
Я лично знаю С достаточно, чтобы писать на нём код...

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

КТ315- Автор вопроса
s54820
На Си нельзя писать код, если тебе приходится «гуг...

На ассемблере я максимум могу прогуглить только функции API самой ОС. На С у меня возникали ошибки в синтаксисе иногда (допустим, я писал шифрование структуры, и во время передачи данных, этот идиотский С жаловался на то, что я передаю адрес на структуру, а не (const char*), который я прописал в аргументах функции, пришлось дописать (const char*) - чем не лишние движения?). Так что нет, я могу спокойно писать на С, и не буду даже вникать в какие-то там его стандарты, мне на многие его вещи вообще без разницы, С это по большей части тупо копирование кода, там вообще ничего вникать не надо, все проекты на С это просто тяп-ляп из кусков чужого кода. Вот на ассемблере я уже буду переписывать код из С или другого языка, и буду вникать в нюансы. На С - нет.

КТ315- Автор вопроса
The Bird of Hermes
А вот первый абзац про типизацию

Это вообще идиотизм, там даже бы void* не помог, он просто не может понять, что в функцию нужен только адрес, там шифруются БАЙТИКИ...

КТ315- Автор вопроса
КТ315
Это вообще идиотизм, там даже бы void* не помог, о...

Вот поэтому пока какой-то С-шник пишет касты, и дописывает в каждую функцию (const char*) - я уже проект сто раз на ассемблере перепишу 😁

КТ315
Вот поэтому пока какой-то С-шник пишет касты, и до...

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

КТ315- Автор вопроса
s54820
Пока ты сто раз переписываешь проект на ассемблере...

Чтобы понять ошибку, надо скомпилировать, чтобы компилятор сказал, что ему не нравится твой код? На ассемблере вообще синтаксис учить не надо, все ошибки будут только в рантайме, а отлаживаются они постановкой в int3, за 5 минут. А значит код пишется намного быстрее.

КТ315
Чтобы понять ошибку, надо скомпилировать, чтобы ко...

Все ошибки будут в рантайме, после деплоя, у юзера. Иногда на железке, которую перепрошить нельзя, с партией в N миллионов. Есть у меня такая, с ошибкой в бутроме.

КТ315
Чтобы понять ошибку, надо скомпилировать, чтобы ко...

Ну не скажи... Ассемблеры разные бывают... Есть вот АТ&Т...

КТ315- Автор вопроса
s54820
Все ошибки будут в рантайме, после деплоя, у юзера...

А у С-шников нет уязвимостей в коде? 😁 Вспоминаем снова великие функции C - strcpy, strcat и др. Или любой софт (даже самый маленький на С), в котором в очередной раз либо переполнение, либо RCE, либо ещё что-то.

КТ315
А у С-шников нет уязвимостей в коде? 😁 Вспоминаем ...

Да, и хотя бы часть этих ошибок я могу отловить.

КТ315- Автор вопроса
s54820
Да, и хотя бы часть этих ошибок я могу отловить.

На ассемблере, допустим, это тоже будет. Обязательно у человека, который про это не знал. Только вот код он напишет быстрее за счёт отсутствия типизации и минималистичного синтаксиса, у которого всё только "по делу". На С же человек сначала пусть разберётся с 1000 ошибок по синтаксису, которые "чинишь одну - вываливается ещё 1000 в каком-нибудь windows.h" 😂 а только потом поговорим про ошибки во время исполнения.

КТ315
А у С-шников нет уязвимостей в коде? 😁 Вспоминаем ...

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

КТ315
На ассемблере, допустим, это тоже будет. Обязатель...

foo.c: In function ‘main’: foo.c:5:5: warning: ‘__builtin_memcpy’ writing 13 bytes into a region of size 6 overflows the destination [-Wstringop-overflow=] 5 | strcpy(buffer, "hello, world"); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ foo.c:4:10: note: destination object ‘buffer’ of size 6 4 | char buffer[6]; | ^~~~~~ Жду подобную диагностику от фасма для rep movsb.

КТ315- Автор вопроса
The Bird of Hermes
К тому же проблема лёгкого синтаксиса в Асме - нео...

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

КТ315
Это только плюс. Вот смотри, гениальный пример. Н...

А на ассемблере ты видишь кучу fadd fmul и начинаешь рисовать на бумажке FPU-стек, вместо того, чтобы решать проблему.

КТ315- Автор вопроса
s54820
foo.c: In function ‘main’: foo.c:5:5: warning: ‘__...

😂 Иногда так смешно с этих аргументов. Плюс С в том, что он отлавливает такие глупые ошибки? Я правильно понял?

КТ315
😂 Иногда так смешно с этих аргументов. Плюс С в то...

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

КТ315
Это только плюс. Вот смотри, гениальный пример. Н...

Формула это ладно. А вот вызов каких-нибудь функций... Не чувствую кайфа в расписывании каждого пуша

КТ315- Автор вопроса
s54820
Да, ты правильно понял. Плюс в том, чтобы машина, ...

Да как раз сложно. Я вообще при работе со строками: 1. Выделяю памяти с запасом 2. При копировании или манипуляциях, всегда думаю о том, чтобы всё влезло - strlen + проверки на максимальный размер буфера, если не то - обрезать, либо выделить память больше 3. Даже если что-то проскользнуло банальное - во время отладки легко протестировать всё и обнаружить Но да, для С-шника нужны такие предупреждения, как я выше уже сказал. Они не додумаются до таких вещей, потому и strcpy кривой, и программы с уязвимостями - компилятор пока не может уязвимости все подсказать :(

КТ315- Автор вопроса
КТ315
Да как раз сложно. Я вообще при работе со строками...

Надеюсь, в компилятор С очень скоро подвезут ChatGPT, чтобы он предсказывал вообще все CVE. Авось нормальные программы хоть писать начнут.

КТ315- Автор вопроса
The Bird of Hermes
Формула это ладно. А вот вызов каких-нибудь функци...

Макросы есть. Мне лично это вообще не рутинно, я довольно быстро печатаю. Заодно пока печатаю push - думаю об аргументах функции, и что в этот раз нужно положить.

КТ315- Автор вопроса

Стикер

«Назло маме я взял сишную либу и весь обляпался».

КТ315- Автор вопроса
s54820
«Назло маме я взял сишную либу и весь обляпался».

Так-то всего 3, и серьёзное было только одно - 3, которое использовали. Первое через 2 года только могло возникнуть, и в итоге так и не возникло - раньше обнаружил и исправил. Второе тоже не возникло - раньше времени исправил, %1024s, %128s... Это ещё учитывая, что полная версия была написана за 3-4 дня, а самая начальная версия - за день. 😎

КТ315
Так-то всего 3, и серьёзное было только одно - 3, ...

Я уже не помню, там ещё потоки вроде друг друга перезаписывали, не? Но в любом случае, всего 3 на боте, который принимает 1 пользовательский ввод. Что касается Си, то нужно просто выбирать правильный инструмент, а не пытаться пользоваться единственным, который у тебя есть. Правильный инструмент в данном случае питон (для начала) или го.

КТ315- Автор вопроса
s54820
Я уже не помню, там ещё потоки вроде друг друга пе...

Это алгоритмическая ошибка вообще, потому что такое я писал впервые (!), а ты что-то там мне предъявлял, что я пишу только то, что уже писал.

КТ315
На ассемблере, допустим, это тоже будет. Обязатель...

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

Mixail Frolov
писать нормально надо, а не от балды. Если писать ...

Так ты саму структуру не передашь, если она слишком большая, тебе надо постараться ещё, чтобы её в стек кинуть

КТ315- Автор вопроса

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта