c wtf

Sep. 16th, 2019 11:13 am
juan_gandhi: (Default)
[personal profile] juan_gandhi

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. 

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

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

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

(no subject)

From: [personal profile] norian - Date: 2019-09-16 08:03 pm (UTC) - Expand

(no subject)

From: [personal profile] plovski - Date: 2019-09-16 08:10 pm (UTC) - Expand

(no subject)

From: [personal profile] rampitec - Date: 2019-09-17 12:21 am (UTC) - Expand

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

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

И шо?

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

Re: И шо?

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

Re: И шо?

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

Re: И шо?

From: [personal profile] andy_ivanov - Date: 2019-09-17 06:28 am (UTC) - Expand

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

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

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

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

(no subject)

From: [personal profile] rampitec - Date: 2019-09-17 12:20 am (UTC) - Expand

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

From: [personal profile] vap - Date: 2019-09-17 02:06 pm (UTC) - Expand

А шо

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

Re: А шо

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

Re: А шо

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

Re: А шо

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

(no subject)

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

(no subject)

From: [personal profile] vap - Date: 2019-09-17 01:11 pm (UTC) - Expand

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

From: [personal profile] rampitec - Date: 2019-09-17 03:51 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/sorcerer-/ - Date: 2019-09-17 05:18 pm (UTC) - Expand

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

(no subject)

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

(no subject)

From: [personal profile] vap - Date: 2019-09-17 01:14 pm (UTC) - Expand

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

(no subject)

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

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

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

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

(no subject)

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

(no subject)

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

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

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

(no subject)

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

(no subject)

From: [personal profile] rampitec - Date: 2019-09-17 04:37 am (UTC) - Expand

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

(no subject)

From: [personal profile] rampitec - Date: 2019-09-17 03:51 pm (UTC) - Expand

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

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

Date: 2019-09-17 05:20 am (UTC)
dmm: (Default)
From: [personal profile] dmm
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."

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

(no subject)

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

(no subject)

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

(no subject)

From: [personal profile] vap - Date: 2019-09-17 01:28 pm (UTC) - Expand

(no subject)

From: [personal profile] epimorphisms_split - Date: 2019-09-17 05:43 pm (UTC) - Expand

(no subject)

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

(no subject)

From: [personal profile] nms - Date: 2019-09-18 08:03 am (UTC) - Expand

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

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

Profile

juan_gandhi: (Default)
Juan-Carlos Gandhi

July 2025

S M T W T F S
  12345
6789 1011 12
131415 1617 1819
20212223242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 23rd, 2025 04:19 pm
Powered by Dreamwidth Studios