реклама на сайте
подробности

 
 
> Самая дорогая однобайтовая ошибка., Просто интересная статья))
sigmaN
сообщение Aug 17 2011, 23:15
Сообщение #1


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



http://habrahabr.ru/blogs/programming/126566/


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 30)
halfdoom
сообщение Aug 18 2011, 03:50
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 003
Регистрация: 20-01-05
Пользователь №: 2 072



Это его (автора), наверное, еще потряхивает после разработки sbuf'ов для FreeBSD. За качество перевода статьи жирная двойка.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 18 2011, 03:55
Сообщение #3


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (sigmaN @ Aug 18 2011, 08:15) *

За статью большое спасибо!
Однако, позволю предположить, что есть ошибки и подороже.
О buffer overflow известно многим. Это значит, такие ошибки можно исключить.
Кто не знает о buffer overflow, тот может не знать различия между uint8_t и int8_t. Правильно? Поэтому, необходимо понимать, что подводных камней везде хватает, и ступать по речке следует осторожно)))


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 18 2011, 09:23
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Фантастически тупая статья статья да еще с поганейшим переводом. Что-то уровне женских журналов обсасывающих глобальные проблемы вроде прыщика на ягодице или журналов для таких-же таких-же прыщавых "хакеров". При этом на полном серьезе предлагается "альтернатива" ДЛЯ ВСЕХ ПЛАТФОРМ новый (а для некоторых архитектур и кучу новых указателей эквивалентных near/far/....) указатель. При этом, самое смешное, автор полагает длину строки в 255 байт совершенно достаточной. А о, например, НЕ однобайтовых фориатах и кодировках (в 21веке!) и не подозревает.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
svss
сообщение Aug 18 2011, 09:45
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594



Маленькие дырки в безопасности кода заставляют думать.
Автор статьи и автор темы - двое из них. Чего ж плохого?
Go to the top of the page
 
+Quote Post
whiteTigr
сообщение Aug 18 2011, 09:58
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 25-07-11
Пользователь №: 66 407



Но назвать это ошибкой - язык не поворачивается.
Всего лишь - вариант реализации, со своими плюсами/минусами. Ничем не хуже любого другого варианта.
Добавление команд в процессор для поддержки таких строк тоже никак не тянет на большие экономические затраты из-за решения какого-то там человека 20 лет назад. За это время кучу процессоров выпустили с новыми командами, и выделять отсюда команды для работы со строками не стоит.
А дырки в безопасности - это от программистов зависит.

Сообщение отредактировал whiteTigr - Aug 18 2011, 09:59
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 18 2011, 10:12
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (svss @ Aug 18 2011, 11:45) *
Маленькие дырки в безопасности кода заставляют думать.
Автор статьи и автор темы - двое из них. Чего ж плохого?

Плохое именно то, что статья совершенно БЕЗДУМНАЯ, когда взят один из аспектов проблемы и бездумно ОТБРОШЕНЫ все остальные. Ах, как хорошо знать длину строки сразу, ах, как это-бы помогло может быть иногда чего-то улучшить, ах это слово "безопасность", ах..... Если ах, то кто кому мешает создавать свои ЛЮБЫЕ представления текстовых строк? Си в этом совершенно демократичен - да он вообще практически ничего о строках не знает, кроме, пожалуй встроенного типа указателя на одно из возможных представлений строки. Все строки в библиотеках - хочешь пользуй, хочешь пиши свои "правильные". Хочешь указатель содержащий размер - да какие проблемы? Опиши и пользуй, пока не надоест. Отцы основатели НЕ запрещают. В чем ошибка и вина Авторов языка? Если кому-то нужно массово и БЕЗДУМНО работать со строками, то зачем для этого вообще Си использовать? Для работы со строками и текстами предназначены другие языки. Вот я прямо сегодня писал на языке достаточно заточенном под обработку строк:
CODE
        if( Val( ErrLine, Remove_Space( Get_Word( ":" ) ) ) == 0 )
        {       
             ++g_compiler_err_cnt;
             Return_Str = Find_Error(  "/NL=0/F=" + FName + "/L=" + Str(ErrLine)  );
        }

Ни тебе strlen() ни прочих strcat() со товарищи....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
SSerge
сообщение Aug 18 2011, 10:28
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата
Наилучшим примером, который я смог найти, является использование NUL-завершенных текстовых строк в C/Unix/Posix. Стоял очень простой выбор: должен ли язык C представлять строки как кортеж адрес + длина или просто как адрес и некий магический символ (NUL), отмечающий конец строки?

Из этого пассажа становится совершенно очевидно что автор не программист, независимо от того чем он зарабатывает себе на жизнь.
В языке С никаких строк вообще не было и нет по сей день.
Вся статья буллшит, за исключением благой вести что по крайней мере один человек достиг-таки просветления:
Цитата
Они требуют, чтобы программист тщательно следил за тем, что исходный код точно описывает то, что необходимо.

и теперь, надо полагать, тщательно следит.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
sasamy
сообщение Aug 18 2011, 16:32
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(SSerge @ Aug 18 2011, 14:28) *
В языке С никаких строк вообще не было и нет по сей день.


Тем не менее в стандарте языка есть описание ф-ций работы со строками ;-) Автор статьи - упоротый паскальщик.

Сообщение отредактировал sasamy - Aug 18 2011, 16:32
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 18 2011, 16:39
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (sasamy @ Aug 18 2011, 19:32) *
Автор статьи - упоротый паскальщик.

Нет sad.gif. Обычный юниксоид ( FreeBSD-шник) сваливший в одну кучу язык 'C', UNIX системы и свои собственные частные проблемы sad.gif
Вообще-то и в Паскале нет типа хранящего адрес+размер. Хранение-же размера в первом байте строки это не то, что Автор считает хорошим решением.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Allregia
сообщение Aug 18 2011, 18:56
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата
Вообще-то и в Паскале нет типа хранящего адрес+размер

Зато в Паскале (Дельфи) есть сишные null-terminated string, а в C++Билдере есть паскалевские AnsiString.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Aug 18 2011, 19:50
Сообщение #12


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата
IBM добавила инструкции для работы с NUL-завершенными строками потому, что..

Потому,что выход АЛУ "==0" уже был. Мегалол.
Go to the top of the page
 
+Quote Post
svss
сообщение Aug 19 2011, 04:23
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594



Цитата(SSerge @ Aug 18 2011, 17:28) *
В языке С никаких строк вообще не было и нет по сей день.
Что Вы имели в виду, интересно?

Цитата(ISO/IEC 9899:1999)
6.4.5 String literals


Нули на конце строки действительно, якобы, - не часть языка, но свойство компилятора, однако и оно, это свойство, заковано в стандарт:
Цитата(ISO/IEC 9899:1999)
6.4.5.5
In translation phase 7, a byte or code of value zero is appended to each multibyte
character sequence that results from a string literal or literals.


Или у отцов-основателей:
Цитата(Kernighan & Ritchie)
2.3
A string constant, or string literal, is a sequence of zero or more characters surrounded by
double quotes, as in "I am a string"
Go to the top of the page
 
+Quote Post
Rst7
сообщение Aug 19 2011, 13:07
Сообщение #14


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE
Автор статьи - упоротый паскальщик.


Автор статьи вообще мало что понимает в этих самых компьютерах.

QUOTE
При использовании NUL-завершенной строки, попытка работы с ней частями, превышающими один байт, может привести к обращению к символам за символом NUL. Если NUL символ является последним байтом страницы виртуальной памяти и следующая страница не определена, это может привести к крушению процесса с ошибкой «страница не найдена» [«page not present»].


"Отличный" пример. А то, что адрес блока (например, для загрузки пачки регистров, в которых потом колдовским кодом (v - 0x01010101UL) & ~v & 0x80808080UL ищется \0) надо выравнивать с точностью до количества этих регистров нет ума сообразить?


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Aug 19 2011, 19:42
Сообщение #15


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Ухх!
Не ожидал, что статья вызовет такую дискуссию.
Очень рад, что всем понравилось ))


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
svss
сообщение Aug 19 2011, 20:00
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594



Цитата(sigmaN @ Aug 20 2011, 02:42) *
Ухх!
Не ожидал, что статья вызовет такую дискуссию.
Очень рад, что всем понравилось ))

холивар жив!
К сожалению ни аффтар статьи, ни половина дискутёров не разобрались
с сутью безопасности кода.
Нуль на конце плох не тем, что сервис "упадёт", а тем, что злоумышленник
может незаметно внедрить свой малварь на место того нуля.
Уважаемым имбеддерам то не грозит, потому оне не ведают, а между тем
у всеми любимого луниха есть проблема, которую маздай умеет решать
(правда болшой кровею). Время рассудит.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 19 2011, 20:07
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (svss @ Aug 19 2011, 23:00) *
ни половина дискутёров не разобрались
с сутью безопасности кода.

Я Вас умоляю, не надо нести в массы "откровения" почерпнутые в глянцевых журналах для малолетних "хакеров".


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
svss
сообщение Aug 19 2011, 20:19
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594



Цитата(zltigo @ Aug 20 2011, 03:07) *
Я Вас умоляю, не надо нести в массы "откровения" почерпнутые в глянцевых журналах для малолетних "хакеров".

Кому что нравится, тот о том и. Я читаю MSDN.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Aug 19 2011, 20:23
Сообщение #19


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Почему это
Цитата
Уважаемым имбеддерам то не грозит, потому оне не ведают
???
Не, ну канеш если это вброс такой - тогда понятно. Вопросов нет.

Вы уж простите, но кажется вам подсунули какой-то неправильный MSDN. Там просто таки целый список нулл терминэйтэд функций найти можно...
В общем слабоват вброс... Никуда не гдиццо ))


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 20 2011, 01:03
Сообщение #20


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (svss @ Aug 20 2011, 05:00) *
Уважаемым имбеддерам то не грозит, потому оне не ведают,.

Еще как грозит rolleyes.gif Микроконтроллеры могут код из ОЗУ выполнять laughing.gif


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
svss
сообщение Aug 20 2011, 05:08
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594



Цитата(sigmaN @ Aug 20 2011, 03:23) *
нулл терминэйтэд функций найти можно... В общем слабоват вброс...

(Да, от обиды, говорят мыльные пузыри лопаются..) Это я не Вам, так - к слову.
Переведите, пожалуйста, если можете, на человеческий язык "нулл терминэйтед функций" - и ладно.

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


Так вот, WDM прямо требует не использовать текстовые строки.
(Кто не знает, исходники WDM/WDF драйверов - процентов на 70 - C/C++)
Вместо языковых строковых констант используется макро UNICODE_STRING


Что до имбеддеров (haker_fox меня понял, спасибо), то я им был, я их есть и, даст Бог,
какое-то время буду. По совместительству.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 20 2011, 10:15
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (svss @ Aug 20 2011, 07:08) *
Вместо языковых строковых констант используется макро UNICODE_STRING

Как особо "продвинутому" читателю MSDN, Вам будет очень полезным знать, что "макро UNICODE_STRING" это не макро, а структура.
Причем эта структура не содержит в себе ни "строковой константы", ни какой-либо строки вообще.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
SSerge
сообщение Aug 20 2011, 11:07
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(svss @ Aug 20 2011, 12:08) *
Я, собственно, зашёл сюда поглядеть, не придумал ли SSerge причину, отчего в языке может не быть строк.
Молчит, стало быть, тоже обижается. А ведь есть ответ - слово из трёх букв.

Да разве-ж то строки? sm.gif
Так, инициализаторы массивов, да и те какие-то недоделанные.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Aug 20 2011, 11:19
Сообщение #24


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Цитата
Переведите, пожалуйста, если можете, на человеческий язык "нулл терминэйтед функций" - и ладно.
ну в смысле принимающих строку с завершающим нулем как параметр ))


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
777777
сообщение Aug 21 2011, 11:57
Сообщение #25


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(svss @ Aug 20 2011, 00:00) *
К сожалению ни аффтар статьи, ни половина дискутёров не разобрались
с сутью безопасности кода.

Вы также входите в число этих дискутеров.

Цитата(svss @ Aug 20 2011, 00:00) *
Нуль на конце плох не тем, что сервис "упадёт", а тем, что злоумышленник
может незаметно внедрить свой малварь на место того нуля.

Это называется "слышал звон, да не знаю где он". А если строка будет начинаться с длины, то злоумышленник не может незаметно ее заменить?

Вообще-то суть безопасности кода заключается в некоторых функциях, работающих со строками, которым не передается размер буфера, в которую надо поместить строку. Если буфер будет недостаточным (или злоумышленник передаст достаточно длинную строку), то она затрет память, находящуюся за пределами строки. Если этот буфер для строки выделен в стеке, то подойдя к процессу творчески можно с передаваемой строке передать свой код и затереть адрес возврата таким образом, чтобы управление передалось на этот код.

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

Сообщение отредактировал 777777 - Aug 22 2011, 06:06
Go to the top of the page
 
+Quote Post
halfdoom
сообщение Aug 22 2011, 04:03
Сообщение #26


Профессионал
*****

Группа: Свой
Сообщений: 1 003
Регистрация: 20-01-05
Пользователь №: 2 072



Цитата(Rst7 @ Aug 19 2011, 16:07) *
Автор статьи вообще мало что понимает в этих самых компьютерах.

Поделитесь копирайтом на фразу? sm.gif Автор широко известен в узких кругах своими безапелляционными заявлениями. А как программист, он вроде и ничего.

Вот выдержка с его домашней страницы.
Цитата
Partial highlights:

Wrote src/release/Makefile
Release engineer for FreeBSD 2.X series
Rewrote the VFS namecache
Cleaned up vnode object model
Usable sysctls
MD5 based password scrambler
Phkmalloc
Jails
Defined sbufs for safe string handling
DEVFS and dynamic device support
GEOM, modular disk transformations.
GBDE , disk encryption you can actually use.
Numerous more or less weird device drivers
Tons of other stuff I've forgotten now


Go to the top of the page
 
+Quote Post
Rst7
сообщение Aug 22 2011, 06:59
Сообщение #27


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE
А как программист, он вроде и ничего.


Ага-ага. С такими-то заявками.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
halfdoom
сообщение Aug 22 2011, 08:52
Сообщение #28


Профессионал
*****

Группа: Свой
Сообщений: 1 003
Регистрация: 20-01-05
Пользователь №: 2 072



Ну, дядя в возрасте, может перегрелся.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Aug 22 2011, 09:02
Сообщение #29


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE
Ну, дядя в возрасте, может перегрелся.


Отож. Лучше уж что-то более годное почитать. Вот, например, рекомендую - http://russian.joelonsoftware.com/index.html


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
svss
сообщение Aug 25 2011, 13:55
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 231
Регистрация: 19-12-08
Из: Новосибирск
Пользователь №: 42 594



Цитата(zltigo @ Aug 20 2011, 17:15) *
"макро UNICODE_STRING" это не макро

DECLARE_CONST_UNICODE_STRING
DECLARE_UNICODE_STRING_SIZE

Я знаю, что кратко - не всегда ясно. Прошу прощения.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Aug 26 2011, 05:34
Сообщение #31


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Года два назад купил его книгу, созданную по мотивам его же блога.
Да, есть много здравых мыслей. Но в общем и целом скучно, напоминает доктора Курпатова от IT:)
А так мужик молодец! Думаю на книге миллион поднял...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 18:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01671 секунд с 7
ELECTRONIX ©2004-2016