The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Взлом Linux через подключение USB-устройства стал реальностью, opennews (ok), 08-Мрт-11, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


85. "Взлом Linux через подключение USB-устройства стал реальность..."  –1 +/
Сообщение от коксюзер (?), 08-Мрт-11, 16:33 
> Кто вам мешает сделать
> struct my_str {
>     char *ptr;
>     size_t len;
> };
> и писать надежно, безопасно, ънтерпрайзно(с)?

Литерал этого типа в студию, для начала.

Ответить | Правка | К родителю #55 | Наверх | Cообщить модератору

87. "Взлом Linux через подключение USB-устройства стал реальность..."  +/
Сообщение от анон (?), 08-Мрт-11, 16:34 
> Литерал этого типа в студию, для начала.

Что еще за "литерал типа"?
В str указатель, в len длина строки, что непонятного?

Ответить | Правка | Наверх | Cообщить модератору

101. "Взлом Linux через подключение USB-устройства стал реальность..."  –2 +/
Сообщение от коксюзер (?), 08-Мрт-11, 17:09 
>> Литерал этого типа в студию, для начала.
> Что еще за "литерал типа"?
> В str указатель, в len длина строки, что непонятного?

С вами - всё предельно ясно.

Ответить | Правка | Наверх | Cообщить модератору

117. "Взлом Linux через подключение USB-устройства стал реальность..."  +/
Сообщение от анон (?), 08-Мрт-11, 18:06 
> С вами - всё предельно ясно.

Ок!

Ответить | Правка | Наверх | Cообщить модератору

125. "Взлом Linux через подключение USB-устройства стал реальность..."  +/
Сообщение от gegMOPO4 (ok), 08-Мрт-11, 19:22 
struct my_str s = { "abc", 3 };
Ответить | Правка | К родителю #85 | Наверх | Cообщить модератору

128. "Взлом Linux через подключение USB-устройства стал реальность..."  –2 +/
Сообщение от коксюзер (?), 08-Мрт-11, 19:36 
> struct my_str s = { "abc", 3 };

Ну вот, вычисление длины строки "на глазок" и ошибка на единицу в простейшем примере. Браво.

Ответить | Правка | Наверх | Cообщить модератору

133. "Взлом Linux через подключение USB-устройства стал реальность..."  +1 +/
Сообщение от gegMOPO4 (ok), 08-Мрт-11, 19:52 
Чтобы не морочить себе голову и не ошибиться, можно использовать простой макрос.

#define MY_STR(L) { L, sizeof(L)-1 }
struct my_str s = MY_STR("abc");

Ответить | Правка | Наверх | Cообщить модератору

136. "Взлом Linux через подключение USB-устройства стал реальность..."  –2 +/
Сообщение от коксюзер (?), 08-Мрт-11, 20:06 
> #define MY_STR(L) { L, sizeof(L)-1 }
> struct my_str s = MY_STR("abc");

Это феерический мрак. sizeof(L) вернёт количество элементов в массиве, включая терминирующий '\0'. У len тип size_t, и хранит он размер массива, а не индекс последнего элемента. Единицу зачем отнимаете?

Ответить | Правка | Наверх | Cообщить модератору

142. "Взлом Linux через подключение USB-устройства стал реальность..."  +1 +/
Сообщение от gegMOPO4 (ok), 08-Мрт-11, 20:28 
Что вас удивляет? Что строковые литералы в Си неявно содержат терминирующий NUL? Что поэтому sizeof строкового литерала на 1 больше длины строки?
Ответить | Правка | Наверх | Cообщить модератору

149. "Взлом Linux через подключение USB-устройства стал реальность..."  +/
Сообщение от коксюзер (?), 08-Мрт-11, 20:37 
> Что вас удивляет? Что строковые литералы в Си неявно содержат терминирующий NUL?
> Что поэтому sizeof строкового литерала на 1 больше длины строки?

Меня удивляет, что в ответ на замечание об ошибке на единицу вы написали эквивалентный по семантике макрос, а на тему "индекс последнего элемента vs. размер массива" начинаете "недоумевать" только сейчас.

Особенно это странно в колее разговора о strl-функциях, коим в size передаётся размер массива, включая '\0', в чём и заключается их главное отличие от strn-функций. И честно говоря, я уверен, что сейчас вы просто отмазываетесь, не желая признать за собой типичную ошибку.

Ответить | Правка | Наверх | Cообщить модератору

159. "Взлом Linux через подключение USB-устройства стал реальность..."  +1 +/
Сообщение от gegMOPO4 (ok), 08-Мрт-11, 20:54 
Я написал, как избежать ошибки в подсчёте числа символов. Да, теперь я вижу в чём была ваша ошибка -- вы почему-то считаете, что длина строки на единицу больше количества символов, содержащихся в ней.

Функции strl* принимают размер буфера, который содержит строку и терминирующий NUL. Его размер должен быть по крайней мере на единицу больше предполагаемой длины строки.

Ответить | Правка | Наверх | Cообщить модератору

166. "Взлом Linux через подключение USB-устройства стал реальность..."  –1 +/
Сообщение от коксюзер (?), 08-Мрт-11, 21:20 
> Я написал, как избежать ошибки в подсчёте числа символов. Да, теперь я

Какой ошибки? Давайте по порядку.

Если следовать вашей логике, по которой в len показанного структурного типа должна записываться длина строки без учёта '\0', то мой комментарий, на который вы ответили, был ошибочен весь.

Если так, вы могли бы мне возразить, предположив, что автор структурного типа предлагает хранить в len именно длину строки. Но вы этого не сделали.

Вы предложили семантически эквивалентный макрос, который, по вашим словам, помог бы "избежать ошибки в подсчёте числа символов". То есть, прочитав мой комментарий, вы согласились с наличием ошибки в приведённом литерале... Которую теперь не считаете ошибкой?

Так была ли ошибка? Вот эта непоследовательность и склоняет меня к мысли, что вы просто юлите.

> вижу в чём была ваша ошибка -- вы почему-то считаете, что
> длина строки на единицу больше количества символов, содержащихся в ней.

Нет. Я считаю, что в len должен храниться размер массива символов, включая '\0', поскольку в операциях со значениями размеров строк без учёта '\0' чаще допускаются ошибки. И авторы strl-функций со мной согласны. К тому же, терминирующий нуль - анахронизм, мешающий применять wide-кодировки с символами постоянной длины, содержащими нулевые байты.

> Функции strl* принимают размер буфера, который содержит строку и терминирующий NUL. Его
> размер должен быть по крайней мере на единицу больше предполагаемой длины
> строки.

По-моему, теперь вы делаете вид, что терминирующий '\0' не является частью строки в Си: "строку и терминирующий NUL" - если это ваша изначальная точка зрения, то почему она такая противоречивая и идёт в разрез со стандартной терминологией?

Ответить | Правка | Наверх | Cообщить модератору

181. "Взлом Linux через подключение USB-устройства стал реальность..."  +/
Сообщение от gegMOPO4 (ok), 08-Мрт-11, 22:39 
Признаюсь, я неправильно понял ваш первый комментарий. Показалось, что вы намекаете на возможность ошибки в такой записи. То, что вы будет оспаривать, что длина строки из трёх символов равна трём, мне и в голову не пришло. Да, ваш комментарий ошибочен весь.

> Нет. Я считаю, что в len должен храниться размер массива символов, включая '\0', поскольку в операциях со значениями размеров строк без учёта '\0' чаще допускаются ошибки. И авторы strl-функций со мной согласны.

Это исключительно ваши личные убеждения. И авторы strl-функций с вами не согласны -- третий аргумент называется size, а не len. Не говоря уже о том, что ASCIIZ-строки к данному представлению вообще не имеют отношения.

> К тому же, терминирующий нуль - анахронизм, мешающий применять wide-кодировки с символами постоянной длины, содержащими нулевые байты.

Да, и поэтому при представлении строки как указателя на массив символов и длины он не нужен.

> По-моему, теперь вы делаете вид, что терминирующий '\0' не является частью строки в Си: "строку и терминирующий NUL" - если это ваша изначальная точка зрения, то почему она такая противоречивая и идёт в разрез со стандартной терминологией?

Да не является. NUL не часть строки в Си, а ограничивающий её символ. Моя точка зрения вполне последовательна и согласуется со стандартной терминологией, как Си, так и общекомпьютерной.

Ответить | Правка | Наверх | Cообщить модератору

196. "Взлом Linux через подключение USB-устройства стал реальность..."  –1 +/
Сообщение от коксюзер (?), 08-Мрт-11, 23:43 
> Признаюсь, я неправильно понял ваш первый комментарий. Показалось, что вы намекаете на
> возможность ошибки в такой записи. То, что вы будет оспаривать, что
> длина строки из трёх символов равна трём, мне и в голову

К чему эти абсурдные инсинуации? Вы прекрасно понимаете, что я имел ввиду. В len должен храниться размер массива символов с терминирующим '\0', точка.

> не пришло. Да, ваш комментарий ошибочен весь.

С вашей точки зрения. С моей, структурный строковый тип без нуль-терминации - ни с чем не совместимый нонсенс, который способствует ошибкам переполнения на единицу и создаёт неадекватные трудности при работе с библиотечными функциями, которые принимают нуль-терминированные строки.

> Это исключительно ваши личные убеждения. И авторы strl-функций с вами не согласны
> -- третий аргумент называется size, а не len. Не говоря уже

Они со мной "не согласны" только в названии аргумента, а вы просто юлите.

> о том, что ASCIIZ-строки к данному представлению вообще не имеют отношения.

К какому данному представлению? К структурному? В параллельном мире могут не иметь, а в реальном, если вы делаете свой, более безопасный строковый тип, потрудитесь обеспечить простоту его применения при работе с библиотеками. Жду возражений!

>> К тому же, терминирующий нуль - анахронизм, мешающий применять wide-кодировки с символами постоянной длины, содержащими нулевые байты.
> Да, и поэтому при представлении строки как указателя на массив символов и
> длины он не нужен.

Я хотел сказать, что реализовать строковый структурный тип, совместимый и с wide-кодировками, и с нуль-терминированными строками в Си практически невозможно. Но меня интересует другое.

Вы что, считаете, что структурный строковый тип не должен быть совместим с нуль-терминированными строками?

> Да не является. NUL не часть строки в Си, а ограничивающий её
> символ. Моя точка зрения вполне последовательна и согласуется со стандартной

Нулевой байт не является частью нуль-терминированной строки, я вас правильно понял?

> терминологией, как Си, так и общекомпьютерной.

Можете назвать источник такой терминологии, что-нибудь для примера?

Ответить | Правка | Наверх | Cообщить модератору

233. "Взлом Linux через подключение USB-устройства стал реальность..."  +1 +/
Сообщение от arturpub (ok), 09-Мрт-11, 11:14 
В len обычно хранят длину строки, а размер массива обычно называют size. Для примера: strlen("abc") == 3, хотя sizeof("abc") == 4. Т.о. хоть нулевой символ и является частью строки, считается, что в ее длину он не входит. По-моему, именование len vs size вполне естественно и интуитивно понятно. Существуют и необычные случаи, но для меня очевидно, что предложенная структура подразумевает хранение ASCIIZ и ее длины в терминах strlen().
Ответить | Правка | К родителю #196 | Наверх | Cообщить модератору

256. "Взлом Linux через подключение USB-устройства стал реальность..."  –1 +/
Сообщение от коксюзер (?), 09-Мрт-11, 17:17 
> В len обычно хранят длину строки, а размер массива обычно называют size.
> Для примера: strlen("abc") == 3, хотя sizeof("abc") == 4. Т.о. хоть

Вы мне ещё букварь почитайте по слогам, в едином дидактическом порыве.

> нулевой символ и является частью строки, считается, что в ее длину
> он не входит. По-моему, именование len vs size вполне естественно и

А по-моему, вполне естественно хранить не len, а size, независимо от его названия. Особенно, предлагая определение типа в контексте разговора о strl-функциях и проблеме со строками. Но я, кажется, понял, почему собеседники завели этот нелепый спор о совершенно вторичных названиях...

> интуитивно понятно. Существуют и необычные случаи, но для меня очевидно, что
> предложенная структура подразумевает хранение ASCIIZ и ее длины в терминах strlen().

И знаете, почему? Похоже, что безопасные строковые типы им в действительности не нужны. Почему не нужны - вопрос отдельный, но такое отношение позволяет им всерьёз рассуждать о структурном типе, не совместимом с ASCIIZ. И именно поэтому они выдвинули формальное решение, не удосужившись, похоже, даже представить, насколько оно жизнеспособно в реальном мире.

Вам очевидно, что структурный тип должен хранить указатель именно на ASCIIZ-строку? Замечательно! Хоть кому-то очевидно.

Ответить | Правка | К родителю #233 | Наверх | Cообщить модератору

286. "Взлом Linux через подключение USB-устройства стал реальность..."  +/
Сообщение от arturpub (ok), 10-Мрт-11, 13:12 
> Вы мне ещё букварь почитайте по слогам, в едином дидактическом порыве.

Вы просили пример, вот я и подумал, что созвучия разбудят вашу интуицию.

> И знаете, почему? Похоже, что безопасные строковые типы им в действительности не
> нужны. Почему не нужны - вопрос отдельный, но такое отношение позволяет

Ничего за них сказать не могу, может так, а может и эдак.
Лично я не приверженец си/++, но от сожалений о том что "все идиоты" никто мудрее не станет, и писать что-то на стандартных сях ни у кого необходимости не отпадет. Поэтому необходимо, так сказать, знать врага в лицо и разговаривать на его языке; вовремя не отличил сайз от лена -- попал на буфер-оверфло или еще на что-нибудь. По мне так вообще печально, что я вместо компилятора выбираю битовые паттерны для своих данных.

Ответить | Правка | К родителю #256 | Наверх | Cообщить модератору

290. "Взлом Linux через подключение USB-устройства стал реальность..."  +/
Сообщение от paxuser (ok), 10-Мрт-11, 18:58 
> Вы просили пример, вот я и подумал, что созвучия разбудят вашу интуицию.

Не просил. Мне всё равно, как называется атрибут, главное - что он хранит. В случае массивов size и length вообще синонимы.

> Лично я не приверженец си/++, но от сожалений о том что "все
> идиоты" никто мудрее не станет, и писать что-то на стандартных сях

Идиотами я никого не называл и не считаю. В банальных ошибках подозревал, но вариант с безразличием скорее всё расставил по местам.

Ответить | Правка | К родителю #286 | Наверх | Cообщить модератору

299. "Взлом Linux через подключение USB-устройства стал реальность..."  +/
Сообщение от arturpub (ok), 11-Мрт-11, 11:42 
> Не просил. Мне всё равно, как называется атрибут, главное - что он
> хранит. В случае массивов size и length вообще синонимы.

Ну даете, блин.. )

зы: посоветуйте плиз что-нибудь из цикла "Ада за 3 дня не для тупых", я как-то брался, но тогда домашнего интернета в этой стране еще не было, а теперь времени не вагон.

Ответить | Правка | К родителю #290 | Наверх | Cообщить модератору

300. "Взлом Linux через подключение USB-устройства стал реальность..."  +/
Сообщение от paxuser (ok), 11-Мрт-11, 12:08 
> Ну даете, блин.. )

Я изначально говорил о размерах массивов, а не длинах строк. Умеющий читать, да учёл.

> зы: посоветуйте плиз что-нибудь из цикла "Ада за 3 дня не для
> тупых", я как-то брался, но тогда домашнего интернета в этой стране
> еще не было, а теперь времени не вагон.

По 2005-ой есть хороший викибук: http://en.wikibooks.org/wiki/Ada_Programming
Квадратные книги видел только по 95-ой, не проникся. Плюс RM не для тупых: http://www.adaic.org/resources/add_content/standards/05aarm/...

Ответить | Правка | К родителю #299 | Наверх | Cообщить модератору

301. "Взлом Linux через подключение USB-устройства стал реальность..."  +/
Сообщение от arturpub (??), 11-Мрт-11, 17:07 
> По 2005-ой есть хороший викибук: http://en.wikibooks.org/wiki/Ada_Programming
> Квадратные книги видел только по 95-ой, не проникся. Плюс RM не для
> тупых: http://www.adaic.org/resources/add_content/standards/05aarm/...

Сенкс, а то как раз пятница свободная выдалась.

Ответить | Правка | К родителю #300 | Наверх | Cообщить модератору

144. "Взлом Linux через подключение USB-устройства стал реальность..."  +1 +/
Сообщение от анон (?), 08-Мрт-11, 20:29 
> Это феерический мрак. sizeof(L) вернёт количество элементов в массиве, включая терминирующий
> '\0'. У len тип size_t, и хранит он размер массива, а
> не индекс последнего элемента. Единицу зачем отнимаете?

Если у вас есть голова, попробуйте воспользоватся ей. Тогда, может, дойдет, что именно из-за \0 и отнимаем единицу. Т.к. в нем нет нужды раз уж мы указываем длину строки.
Если вы и так все знаете, к чему эти "покажите литералы" и т.п.? Хочецца посамоутверждаться?

Ответить | Правка | К родителю #136 | Наверх | Cообщить модератору

169. "Взлом Linux через подключение USB-устройства стал реальность..."  –3 +/
Сообщение от коксюзер (?), 08-Мрт-11, 21:35 
> Если у вас есть голова, попробуйте воспользоватся ей. Тогда, может, дойдет, что
> именно из-за \0 и отнимаем единицу. Т.к. в нем нет нужды
> раз уж мы указываем длину строки.

В литерале '\0' в конце строки есть, почему в len он учитываться не должен? И правильно ли я вас понял, вы предлагаете сделать структурный строковый тип несовместимым с нуль-терминированными строками, работая с размерами по образу и подобию strn-функций? Какой оригинальный и жизнеспособный замысел! Алсо, ваш литерал с подсчётом количества символов на глазок - это смех и слёзы. Хоть бы макрос предложили, как другой товарищ тут.

> Если вы и так все знаете, к чему эти "покажите литералы" и
> т.п.? Хочецца посамоутверждаться?

То есть, армия хамоватых ура-апологетов бездарного Си у меня не может вызывать иных эмоций, кроме желания самоутвердиться? Да вы по себе судите, неуважаемый.

Ответить | Правка | Наверх | Cообщить модератору

139. "Взлом Linux через подключение USB-устройства стал реальность..."  +/
Сообщение от анон (?), 08-Мрт-11, 20:24 
Есть тут ошибка или нет, можно сказать только взглянув на функции, работающие с этой структурой.
Ответить | Правка | К родителю #128 | Наверх | Cообщить модератору

141. "Взлом Linux через подключение USB-устройства стал реальность..."  –1 +/
Сообщение от коксюзер (?), 08-Мрт-11, 20:26 
> Есть тут ошибка или нет, можно сказать только взглянув на функции, работающие
> с этой структурой.

Я ждал этой отмазки, но она не катит, поскольку собеседник отвечал на моё замечание об ошибке на единицу. Его макрос совершает ровно ту же ошибку.

Ответить | Правка | Наверх | Cообщить модератору

145. "Взлом Linux через подключение USB-устройства стал реальность..."  +1 +/
Сообщение от анон (?), 08-Мрт-11, 20:30 
> Я ждал этой отмазки, но она не катит, поскольку собеседник отвечал на
> моё замечание об ошибке на единицу. Его макрос совершает ровно ту
> же ошибку.

Где там ошибка-то? Строка из 3 (трех!) элементов, нулл не нужен т.к. указываем непосредственно длину.

Ответить | Правка | Наверх | Cообщить модератору

243. "Взлом Linux через подключение USB-устройства стал реальность..."  +/
Сообщение от Аноним (-), 09-Мрт-11, 14:23 
>> Кто вам мешает сделать
>> struct my_str {
>>     char *ptr;
>>     size_t len;
>> };
>> и писать надежно, безопасно, ънтерпрайзно(с)?
> Литерал этого типа в студию, для начала.

my_str s = MY_STR("RTFM!");

Ответить | Правка | К родителю #85 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру