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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Самая дорогая однобайтовая ошибка., Просто интересная статья))
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
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

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

 


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


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