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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> LwIP это потенциально опасное ПО или нет?, или я неправильно понял и не знаю что и как
AleksBak
сообщение Apr 8 2016, 09:21
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Цитата(Сергей Борщ @ Apr 8 2016, 12:58) *
...Потом этот указатель записывается в то место, которое было указано входным параметром...des333.

Ну да - все так. Но этот указатель теперь указывает на переменную в этой куче. И эта переменная-структура (ее объявление см. выше) теперь уже заполнена прямо в этой же функции netconn_accept уже должна быть (!). Если же нет и указатель на нее равен NULL, то произошел дисконнект. А в вызвавшей основной функции мы пользуемся готовыми данными из этой переменной (которая находится в куче и не забываем об этом) и получается, что не имеем права никакую др. лишнюю операцию произвести чтобы не дай бог (ПО ведь тут на божьем слове держится) затереть значение этой переменной в куче. Вот так я понял. Если нет, то конечно сыплю голову пеплом как говорится.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 8 2016, 10:18
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (AleksBak @ Apr 8 2016, 11:21) *
и получается, что не имеем права никакую др. лишнюю операцию произвести чтобы не дай бог (ПО ведь тут на божьем слове держится) затереть значение этой переменной в куче.
Вы, вероятно, неправильно понимаете термин "куча" (heap). Вам не зря про malloc писали. Если память выделена в куче - она зарезервирована и никто ее затереть не сможет, разве что только захочет намеренно испортить, но намеренно можно испортить совершенно любую переменную.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 8 2016, 10:31
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Еще пояснение: newconn - это указатель на область памяти, в которую будет скопирован элемент из очереди ОС - так оказалось когда дальше просмотрел. Мы, в netconn_accept(), динамически выделили под эту область памяти место в размере структуры типа netconn:
Код
struct netconn *newconn;

Правильно?? Столько выделяется ведь? В процессе работы ОС, в эту динамически выделенную область памяти скопируется элемент очереди когда наступит событие что мы тут ожидаем (сконнектится кто-то). А потом, на выходе функции, в этой динамической памяти мы работаем опять с переменной структуры в ней. А если в этот момент времени кто-то покоцает эту динамически выделенную память?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 8 2016, 10:36
Сообщение #19


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (AleksBak @ Apr 8 2016, 12:31) *
А если в этот момент времени кто-то покоцает эту динамически выделенную память?
А если кто-то покоцает стек? А если кто-то затрет все ОЗУ?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 8 2016, 10:38
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Цитата(Сергей Борщ @ Apr 8 2016, 14:18) *
Вы, вероятно, неправильно понимаете термин "куча" (heap). Вам не зря про malloc писали. Если память выделена в куче - она зарезервирована и никто ее затереть не сможет, разве что только захочет намеренно испортить, но намеренно можно испортить совершенно любую переменную.

Я думал, что куча это типа мусорки и временно в ней создаем переменную (держим над мусорным ведром пока что), что-то делаем, а на выходе из функции бросаем ее в мусорное ведро (а там внутри что-то типа шреддера стоит и перемалывает это наш мусор). И больше, после выхода из функции, не надо лазить в это мусорное ведро и копаться в нем в поисках еды нашей переменной. Вот так думал если по "колхозному" пояснить. laughing.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 8 2016, 10:41
Сообщение #21


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (AleksBak @ Apr 8 2016, 12:38) *
Я думал, что куча это типа мусорки и временно в ней создаем переменную
Я вам даже ссылку привел. А вот чтение информации из интернета вслух - 100 евро в час, увы.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 8 2016, 10:53
Сообщение #22


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Цитата(Сергей Борщ @ Apr 8 2016, 14:36) *
...А если кто-то затрет все ОЗУ?

biggrin.gif

Цитата(Сергей Борщ @ Apr 8 2016, 14:41) *
Я вам даже ссылку привел. А вот чтение информации из интернета вслух - 100 евро в час, увы.

Большое Вам спасибо за нужное направление. И отдельное спасибо в первую очередь des333! До меня дошло более-менее, но самое главное не это в итоге! А то что если это так, то где-то тут пропущен оператор free!!! А в примере его как раз и нету! "Ти-ти" как говорит мне сынишка (3 года, а на грузовик говорит - "говивик" и т.п.). А это значит... smile3046.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 8 2016, 10:58
Сообщение #23


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (AleksBak @ Apr 8 2016, 12:53) *
где-то тут пропущен оператор free!!! А в примере его как раз и нету!
Поищите в этом примере netconn_delete()


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Apr 8 2016, 14:08
Сообщение #24


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Вообще это довольно дерзко, не особо и в С понимая, вот так сходу брать и обвинять LwIP в глючности. Я бы посоветовал брать за аксиому, что там все правильно, а если вам кажется иначе, искать ошибки в вашем понимании С вообще и программы в частности.
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 8 2016, 17:24
Сообщение #25


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Цитата(ar__systems @ Apr 8 2016, 18:08) *
Вообще это довольно дерзко, не особо и в С понимая, вот так сходу брать и обвинять LwIP в глючности. Я бы посоветовал брать за аксиому, что там все правильно, а если вам кажется иначе, искать ошибки в вашем понимании С вообще и программы в частности.

А Вы в C понимаете?? bb-offtopic.gif Тогда бы и объяснили чего и как . Тут объяснили. bb-offtopic.gif Мне люди тут и объяснили подробно и доходчиво - свое время потратили и ссылку привели и не одну. Вот им сто раз спасибо готов говорить за это (только так и могу - форум ведь все-таки тут). А Вы вот только под конец написали свое мнение по-этому поводу. Резюме так сказать. И что же? bb-offtopic.gif bb-offtopic.gif Вот что. А вообще такое предвзятое отношение к этому LwIP у меня не просто так, а вот стал проверять его работу и что-то нестабильной она показалась сильно. Стал изучать потихоньку что и как и вот в этой теме и спросил один из моментов при этом. В разделе "Для начинающих" между прочим. Ну не приходилось мне особо применять динам. выделение памяти (может даже и к лучшему это вообще-то т.к. темный лес еще тот).

У меня другой сетевой стек работал месяцами не выключаясь. Больше полгода - точно было, а больше не получилось только потому что отключали для плановой замены буферного акк-ра или когда ремонт делали в комнате. А вот насчет LwIP-а что-то я совсем не уверен, что такое будет. Вообще не уверен. Поживем - увидим как говорится.
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Apr 9 2016, 20:11
Сообщение #26


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(AleksBak @ Apr 8 2016, 12:24) *
У меня другой сетевой стек работал месяцами не выключаясь. Больше полгода - точно было, а больше не получилось только потому что отключали для плановой замены буферного акк-ра или когда ремонт делали в комнате. А вот насчет LwIP-а что-то я совсем не уверен, что такое будет. Вообще не уверен. Поживем - увидим как говорится.


Я да, понимаю, и в LWIP тоже. Он у меня тоже по полгода работает. Есть нюансы конечно, но для embedded stack пойдет.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 10 2016, 08:18
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AleksBak @ Apr 8 2016, 23:24) *
А Вы в C понимаете?? bb-offtopic.gif Тогда бы и объяснили чего и как . Тут объяснили. bb-offtopic.gif Мне люди тут и объяснили подробно и
...
В разделе "Для начинающих" между прочим. Ну не приходилось мне особо применять динам. выделение памяти (может даже и к лучшему это вообще-то т.к. темный лес еще тот).

Если Вы не можете разобраться в паре строк простого кода, то очевидно, советовать можно только изучать учебник по си - все остальные советы бессмысленны.
Да и разделом Вы ошиблись, тут где-то был раздел "Для совсем начинающих", Вам туда, пока язык не изучите.
Динамическим выделением памяти и кучей в исходной функции даже не пахнет. Откуда Вы его постоянно приплетаете? Создаётся впечатление, что Вы не знаете что это такое, как впрочем и что такое "локальная переменная".
В исходной функции идёт обычный возврат данных через указатель. Если даже такое не понятно - только учебник.
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 10 2016, 08:31
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Цитата(jcxz @ Apr 10 2016, 12:18) *
...
Динамическим выделением памяти в исходных функциях даже не пахнет...

Что Вы говорите? biggrin.gif Неужели??? Тут значит уже статическое выделение памяти под переменную? Да ну?? Мне тут люди уже ответили и пояснили популярно что и как и где я был не прав. Все я признаю и благодарен им. А Вы можете дальше не пояснять т.к. толку будет абсолютный нуль. Неделю назад Вы конкретно заявили, что STM32F030 это Cortex-M3 серия и что? Запомнил как раз Ваш пост и ник (!). Еще раз повторяю для любителей впустую писать - мне тут все ответили люди и пояснили. Огромное спасибо им. И все. Понятно да?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 10 2016, 08:45
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(AleksBak @ Apr 10 2016, 14:31) *
Что Вы говорите? biggrin.gif Неужели??? Тут значит уже статическое выделение памяти под переменную? Да ну??

Ни динамических ни статических выделений памяти там вообще нет никаких. Ни одного.

Цитата(AleksBak @ Apr 10 2016, 14:31) *
Неделю назад Вы конкретно заявили, что STM32F030 это Cortex-M3 серия и что? Запомнил как раз Ваш пост и ник (!).

Ложь. Cortex-M3 - это не серия (серия чего???), это ядро.
И утверждать на каком ядре построен STM32F030 я не мог, так как не знаю этого, и мне это не интересно.

PS: Очевидно Вы даже читать не умеете, то что Вам написали.
Go to the top of the page
 
+Quote Post
AleksBak
сообщение Apr 10 2016, 09:19
Сообщение #30


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364



Цитата(jcxz @ Apr 10 2016, 12:45) *
Выделений памяти там вообще нет никаких. Ни одного.
...

Поясню как это все работает :
Код
struct netconn *newconn;

тут мы фактически выделили память под структуру типа netconn (ее описание см. тут же в этой теме), а далее тут передаем:
sys_arch_mbox_fetch(&conn->acceptmbox, (void **) &newconn, 0);
мы ждем прихода элемент в очередь сообщений и как оно там появится, то его содержимое будет скопировано в выделенный буфер под него т.е. по указателю newconn будет скопирована вся такая структура (ее описание см. тут в этой теме). А функция sys_arch_mbox_fetch эта обертка под получение этого элемента очереди в ОС. А насчет ядра и серии - да я очень грубо ошибся и не пойму как такое слово мог написать. Ядро конечно это. Еще какие ошибки у меня тут есть?? Мне значит тогда совсем закопаться и в школу пойти так да? Вот я сижу-пишу как дурак эти строчки, чего-то доказываю, а двое спиногрызов (дети) реально в этот момент меня задалбливают. cranky.gif Один со своими машинками лезет, а другая чем-то недовольна и кричит громко в ответ.
Go to the top of the page
 
+Quote Post

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

 


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


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