|
Самая дорогая однобайтовая ошибка., Просто интересная статья)) |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 30)
|
Aug 18 2011, 03:55
|

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

|
QUOTE (sigmaN @ Aug 18 2011, 08:15)  За статью большое спасибо! Однако, позволю предположить, что есть ошибки и подороже. О buffer overflow известно многим. Это значит, такие ошибки можно исключить. Кто не знает о buffer overflow, тот может не знать различия между uint8_t и int8_t. Правильно? Поэтому, необходимо понимать, что подводных камней везде хватает, и ступать по речке следует осторожно)))
--------------------
Выбор.
|
|
|
|
|
Aug 18 2011, 09:58
|
Участник

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

|
Но назвать это ошибкой - язык не поворачивается. Всего лишь - вариант реализации, со своими плюсами/минусами. Ничем не хуже любого другого варианта. Добавление команд в процессор для поддержки таких строк тоже никак не тянет на большие экономические затраты из-за решения какого-то там человека 20 лет назад. За это время кучу процессоров выпустили с новыми командами, и выделять отсюда команды для работы со строками не стоит. А дырки в безопасности - это от программистов зависит.
Сообщение отредактировал whiteTigr - Aug 18 2011, 09:59
|
|
|
|
|
Aug 18 2011, 10:12
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Aug 18 2011, 10:28
|
Профессионал
    
Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528

|
Цитата Наилучшим примером, который я смог найти, является использование NUL-завершенных текстовых строк в C/Unix/Posix. Стоял очень простой выбор: должен ли язык C представлять строки как кортеж адрес + длина или просто как адрес и некий магический символ (NUL), отмечающий конец строки? Из этого пассажа становится совершенно очевидно что автор не программист, независимо от того чем он зарабатывает себе на жизнь. В языке С никаких строк вообще не было и нет по сей день. Вся статья буллшит, за исключением благой вести что по крайней мере один человек достиг-таки просветления: Цитата Они требуют, чтобы программист тщательно следил за тем, что исходный код точно описывает то, что необходимо. и теперь, надо полагать, тщательно следит.
--------------------
Russia est omnis divisa in partes octo.
|
|
|
|
|
Aug 19 2011, 04:23
|

Местный
  
Группа: Свой
Сообщений: 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"
|
|
|
|
|
Aug 19 2011, 13:07
|

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

|
QUOTE Автор статьи - упоротый паскальщик. Автор статьи вообще мало что понимает в этих самых компьютерах. QUOTE При использовании NUL-завершенной строки, попытка работы с ней частями, превышающими один байт, может привести к обращению к символам за символом NUL. Если NUL символ является последним байтом страницы виртуальной памяти и следующая страница не определена, это может привести к крушению процесса с ошибкой «страница не найдена» [«page not present»]. "Отличный" пример. А то, что адрес блока (например, для загрузки пачки регистров, в которых потом колдовским кодом (v - 0x01010101UL) & ~v & 0x80808080UL ищется \0) надо выравнивать с точностью до количества этих регистров нет ума сообразить?
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Aug 19 2011, 20:00
|

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

|
Цитата(sigmaN @ Aug 20 2011, 02:42)  Ухх! Не ожидал, что статья вызовет такую дискуссию. Очень рад, что всем понравилось )) холивар жив! К сожалению ни аффтар статьи, ни половина дискутёров не разобрались с сутью безопасности кода. Нуль на конце плох не тем, что сервис "упадёт", а тем, что злоумышленник может незаметно внедрить свой малварь на место того нуля. Уважаемым имбеддерам то не грозит, потому оне не ведают, а между тем у всеми любимого луниха есть проблема, которую маздай умеет решать (правда болшой кровею). Время рассудит.
|
|
|
|
|
Aug 19 2011, 20:23
|

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

|
Почему это Цитата Уважаемым имбеддерам то не грозит, потому оне не ведают ??? Не, ну канеш если это вброс такой - тогда понятно. Вопросов нет. Вы уж простите, но кажется вам подсунули какой-то неправильный MSDN. Там просто таки целый список нулл терминэйтэд функций найти можно... В общем слабоват вброс... Никуда не гдиццо ))
--------------------
The truth is out there...
|
|
|
|
|
Aug 20 2011, 05:08
|

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

|
Цитата(sigmaN @ Aug 20 2011, 03:23)  нулл терминэйтэд функций найти можно... В общем слабоват вброс... (Да, от обиды, говорят мыльные пузыри лопаются..) Это я не Вам, так - к слову. Переведите, пожалуйста, если можете, на человеческий язык "нулл терминэйтед функций" - и ладно. Я, собственно, зашёл сюда поглядеть, не придумал ли SSerge причину, отчего в языке может не быть строк. Молчит, стало быть, тоже обижается. А ведь есть ответ - слово из трёх букв. Так вот, WDM прямо требует не использовать текстовые строки. (Кто не знает, исходники WDM/WDF драйверов - процентов на 70 - C/C++) Вместо языковых строковых констант используется макро UNICODE_STRING Что до имбеддеров (haker_fox меня понял, спасибо), то я им был, я их есть и, даст Бог, какое-то время буду. По совместительству.
|
|
|
|
|
Aug 20 2011, 11:07
|
Профессионал
    
Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528

|
Цитата(svss @ Aug 20 2011, 12:08)  Я, собственно, зашёл сюда поглядеть, не придумал ли SSerge причину, отчего в языке может не быть строк. Молчит, стало быть, тоже обижается. А ведь есть ответ - слово из трёх букв. Да разве-ж то строки? Так, инициализаторы массивов, да и те какие-то недоделанные.
--------------------
Russia est omnis divisa in partes octo.
|
|
|
|
|
Aug 21 2011, 11:57
|

Профессионал
    
Группа: Участник
Сообщений: 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
|
|
|
|
|
Aug 22 2011, 04:03
|

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

|
Цитата(Rst7 @ Aug 19 2011, 16:07)  Автор статьи вообще мало что понимает в этих самых компьютерах. Поделитесь копирайтом на фразу?  Автор широко известен в узких кругах своими безапелляционными заявлениями. А как программист, он вроде и ничего. Вот выдержка с его домашней страницы. Цитата 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
|
|
|
|
|
Aug 25 2011, 13:55
|

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

|
Цитата(zltigo @ Aug 20 2011, 17:15)  "макро UNICODE_STRING" это не макро DECLARE_CONST_UNICODE_STRING DECLARE_UNICODE_STRING_SIZE Я знаю, что кратко - не всегда ясно. Прошу прощения.
|
|
|
|
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|