juan_gandhi: (Default)
Juan-Carlos Gandhi ([personal profile] juan_gandhi) wrote2019-09-16 11:13 am
Entry tags:

c wtf

Reading this book: https://www.oreilly.com/library/view/programming-rust/9781491927274/ch01.html

It says:
 

Consider the following C program:

int main(int argc, char **argv) {
  unsigned long a[1];
  a[3] = 0x7ffff7b36cebUL;
  return 0;
}

According to C99, because this program accesses an element off the end of the array a, its behavior is undefined, meaning that it can do anything whatsoever. When we ran this program on Jim’s laptop, it produced the following output:

undef: Error: .netrc file is readable by others.
undef: Remove password or make file unreadable by others.

Then it crashed. Jim’s laptop doesn’t even have a .netrc file. If you try it yourself, it will probably do something entirely different. 

garote: (Default)

[personal profile] garote 2019-09-16 06:46 pm (UTC)(link)
What OS was this run on!?
norian: (Default)

[personal profile] norian 2019-09-16 07:02 pm (UTC)(link)
ну дык код надо нормально писать, а не фигачить рандомные константы куда попало

vit_r: default (Default)

[personal profile] vit_r 2019-09-16 07:29 pm (UTC)(link)
Тогда не нужны будут другие более хорошие языки.

(no subject)

[personal profile] norian - 2019-09-16 20:03 (UTC) - Expand

(no subject)

[personal profile] plovski - 2019-09-16 20:10 (UTC) - Expand

(no subject)

[personal profile] rampitec - 2019-09-17 00:21 (UTC) - Expand
sab123: (Default)

[personal profile] sab123 2019-09-17 06:50 am (UTC)(link)
Это не рандомные константы. Это специально подобранные константы, чтобы возврат из функции произошел на адрес, печатающий интересные сообщения.
vit_r: default (Default)

[personal profile] vit_r 2019-09-16 07:32 pm (UTC)(link)
Они намекают на то, что не в курсе, что файлы с точкой впереди в некоторых представлениях не показываются в составе директории?

И шо?

[personal profile] andy_ivanov 2019-09-17 04:54 am (UTC)(link)
Я всигда гаварил, шо программисты находятся в начальной стадии. Где вы будете ставить точку на иврите или в иероглифах?

Re: И шо?

[personal profile] andy_ivanov - 2019-09-17 06:25 (UTC) - Expand

Re: И шо?

[personal profile] vit_r - 2019-09-17 05:47 (UTC) - Expand

Re: И шо?

[personal profile] andy_ivanov - 2019-09-17 06:28 (UTC) - Expand
rampitec: (Default)

[personal profile] rampitec 2019-09-16 08:00 pm (UTC)(link)
Сказано UB, значит UB!

[personal profile] chabapok 2019-09-16 08:09 pm (UTC)(link)
в чем заключается суть вопроса?
Используйте rust. Он лучше
А лучше, используйте java

[personal profile] vap 2019-09-16 09:47 pm (UTC)(link)
Ну нет в Си защиты памяти никакой, что ж поделаешь. Была бы - и мы бы не смогли на нем писать то, что пишем.
Единственный известный мне язык, одновременно дающий какие-то гарантии в этой области, и пригодный для системного программирования - это Rust. Но молод он еще, и многие вещи в нем делаются совсем не так, как мы привыкли (например, хрен сделаешь на нем двусвязный список в стиле list-а из линуксового ядра). Наверняка в расте для этого есть другие пути - но в том-то и дело, что этим другим путям учиться еще надо книжки писать, три поколения студентов хотя бы выучить этим новым ужимкам, и только потом оно станет мэйнстримом. А Си есть уже сейчас, и некоторая аккуратность вполне достаточна для написания надежного софта.

[personal profile] vap 2019-09-16 09:52 pm (UTC)(link)
А, ну и еще: в качестве адреса возврата в эту позицию стека можно было запихать не это число, а какое-то другое, и выполнение бы продолжилось не с этой точки (где идет распечатка соответствующего сообщения), а с какой-то другой. Главное, найти в образе памяти на нужной машине какой-то интересный код, а уж передать на него управление - не проблема. Поэтому всякие рандомизаторы стека и линковки и делают.

(no subject)

[personal profile] rampitec - 2019-09-17 00:20 (UTC) - Expand

(no subject)

[personal profile] vap - 2019-09-17 01:45 (UTC) - Expand

(no subject)

[personal profile] rampitec - 2019-09-17 01:52 (UTC) - Expand

(no subject)

[personal profile] vap - 2019-09-17 02:10 (UTC) - Expand

(no subject)

[personal profile] rampitec - 2019-09-17 04:01 (UTC) - Expand

(no subject)

[personal profile] vap - 2019-09-17 04:35 (UTC) - Expand

(no subject)

[personal profile] rampitec - 2019-09-17 04:39 (UTC) - Expand

(no subject)

[personal profile] vap - 2019-09-17 05:06 (UTC) - Expand

(no subject)

[personal profile] chabapok - 2019-09-17 07:42 (UTC) - Expand

(no subject)

[personal profile] vap - 2019-09-17 14:06 (UTC) - Expand

А шо

[personal profile] andy_ivanov - 2019-09-17 04:58 (UTC) - Expand

Re: А шо

[personal profile] vap - 2019-09-17 05:07 (UTC) - Expand

Re: А шо

[personal profile] rampitec - 2019-09-17 05:26 (UTC) - Expand

Re: А шо

[personal profile] rampitec - 2019-09-17 05:25 (UTC) - Expand

(no subject)

[personal profile] sab123 - 2019-09-17 06:51 (UTC) - Expand

(no subject)

[personal profile] vap - 2019-09-17 13:11 (UTC) - Expand

(no subject)

[personal profile] chabapok - 2019-09-17 07:28 (UTC) - Expand

(no subject)

[personal profile] rampitec - 2019-09-17 07:37 (UTC) - Expand

(no subject)

[personal profile] chabapok - 2019-09-17 07:49 (UTC) - Expand

(no subject)

[personal profile] rampitec - 2019-09-17 07:57 (UTC) - Expand

(no subject)

[personal profile] rampitec - 2019-09-17 15:51 (UTC) - Expand
thedeemon: (Default)

[personal profile] thedeemon 2019-09-16 10:46 pm (UTC)(link)
Там (С/С++) еще есть прикол, что если компилятор видит код, где заведомо undefined behavior, то он волен не компилировать что написано, а делать что угодно. Некоторые оптимизации такие функции вообще до nop сократить могут, весь плохой код выбросить нафиг. А могут и вставить код форматирования диска, стандарт разрешает. UB.

(no subject)

[personal profile] thedeemon - 2019-09-17 09:15 (UTC) - Expand

(no subject)

[personal profile] vap - 2019-09-17 13:14 (UTC) - Expand
rampitec: (Default)

[personal profile] rampitec 2019-09-17 12:44 am (UTC)(link)
Это кстати очень интересный вопрос. По стандарту я могу в компиляторе написать любой код, включая активацию ботнета, который в итоге приведет к ядерным бомбардировкам Земли. Ну или не так кардинально: с списанию денег со счета горе-программиста через эксплойт. Но вот что по этому поводу думают юристы?

(no subject)

[personal profile] thedeemon - 2019-09-17 09:16 (UTC) - Expand

[personal profile] chabapok 2019-09-17 08:02 am (UTC)(link)
Видел где-то, что в современных компиляторах есть внутренний флажок "пользователь - идиот". И если компилятор видит какое-то кол-во странных финтов, то включается другой режим компиляции.

Конкретно я это слышал не про UB-конструкции а про чрезмерное увлечение инлайнами. Если в одном файле кол-во инлайнов больше заданного - то пользователь идиот, и инлайнить ненадо вообще ничего.

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

(no subject)

[personal profile] rampitec - 2019-09-17 08:11 (UTC) - Expand

(no subject)

[personal profile] rampitec - 2019-09-17 08:12 (UTC) - Expand
rampitec: (Default)

[personal profile] rampitec 2019-09-17 12:32 am (UTC)(link)
По этому, кстати, поводу. Сегодня читал новость о новых фичах linux kernel 5.3. Одна из фич: за процессом может быть запинен pid. Если он выйдет, а потом зайдет, то снова получит тот же пин. Один я жду эксплойтов? Вот очень похожих на этот вот эксплойтов.
archaicos: Шарж (Default)

[personal profile] archaicos 2019-09-17 03:40 am (UTC)(link)
Это типа народ уже сдаётся, видя всё новые и новые Spectre'ы?

(no subject)

[personal profile] rampitec - 2019-09-17 04:02 (UTC) - Expand

(no subject)

[personal profile] rampitec - 2019-09-17 04:37 (UTC) - Expand
avnik: (Default)

[personal profile] avnik 2019-09-17 01:16 pm (UTC)(link)
Тут бы надо посмотреть на минимально полный пример где эта фича используется.

(no subject)

[personal profile] rampitec - 2019-09-17 15:51 (UTC) - Expand

[personal profile] malobukov 2019-09-17 12:39 am (UTC)(link)
У меня Segmentation fault получается. Вполне предсказуемо, кстати.
rampitec: (Default)

[personal profile] rampitec 2019-09-17 12:41 am (UTC)(link)
А нехрен запускать не на той платформе!
dmm: (Default)

[personal profile] dmm 2019-09-17 05:20 am (UTC)(link)
Speaking about synchronicity: I just found a new paper (Sept.13, https://arxiv.org/abs/1909.06353 , "That's C, baby. C!"), and its abstract says:

"Hardly a week goes by at BUGSENG without having to explain to someone that almost any piece of C text, considered in isolation, means absolutely nothing. The belief that C text has meaning in itself is so common, also among seasoned C practitioners, that I thought writing a short paper on the subject was a good time investment. The problem is due to the fact that the semantics of the C programming language is not fully defined: non-definite behavior, predefined macros, different library implementations, peculiarities of the translation process, . . . : all these contribute to the fact that no meaning can be assigned to source code unless full details about the build are available. The paper starts with an exercise that admits a solution. The existence of this solution will hopefully convince anyone that, in general, unless the toolchain and the build procedure are fully known, no meaning can be assigned to any nontrivial piece of C code."
nms: (Default)

[personal profile] nms 2019-09-17 06:29 am (UTC)(link)
(1) C -- был, есть и будет ассемблером с бантиками. Смотри "Duff device".

(no subject)

[personal profile] nms - 2019-09-17 10:13 (UTC) - Expand

(no subject)

[personal profile] epimorphisms_split - 2019-09-17 10:49 (UTC) - Expand

(no subject)

[personal profile] vap - 2019-09-17 13:28 (UTC) - Expand

(no subject)

[personal profile] epimorphisms_split - 2019-09-17 17:43 (UTC) - Expand

(no subject)

[personal profile] archaicos - 2019-09-18 06:51 (UTC) - Expand

(no subject)

[personal profile] nms - 2019-09-18 08:03 (UTC) - Expand
epimorphisms_split: (Default)

[personal profile] epimorphisms_split 2019-09-17 09:40 am (UTC)(link)
With today's compilers the program is likely to do absolutely nothing whatsoever.

https://godbolt.org/z/R4pac2
Edited 2019-09-17 09:57 (UTC)