|
|
  |
LwIP это потенциально опасное ПО или нет?, или я неправильно понял и не знаю что и как |
|
|
|
Apr 8 2016, 09:21
|
Частый гость
 
Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364

|
Цитата(Сергей Борщ @ Apr 8 2016, 12:58)  ...Потом этот указатель записывается в то место, которое было указано входным параметром...des333. Ну да - все так. Но этот указатель теперь указывает на переменную в этой куче. И эта переменная-структура (ее объявление см. выше) теперь уже заполнена прямо в этой же функции netconn_accept уже должна быть (!). Если же нет и указатель на нее равен NULL, то произошел дисконнект. А в вызвавшей основной функции мы пользуемся готовыми данными из этой переменной (которая находится в куче и не забываем об этом) и получается, что не имеем права никакую др. лишнюю операцию произвести чтобы не дай бог (ПО ведь тут на божьем слове держится) затереть значение этой переменной в куче. Вот так я понял. Если нет, то конечно сыплю голову пеплом как говорится.
|
|
|
|
|
Apr 8 2016, 10:18
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Apr 8 2016, 10:31
|
Частый гость
 
Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364

|
Еще пояснение: newconn - это указатель на область памяти, в которую будет скопирован элемент из очереди ОС - так оказалось когда дальше просмотрел. Мы, в netconn_accept(), динамически выделили под эту область памяти место в размере структуры типа netconn: Код struct netconn *newconn; Правильно?? Столько выделяется ведь? В процессе работы ОС, в эту динамически выделенную область памяти скопируется элемент очереди когда наступит событие что мы тут ожидаем (сконнектится кто-то). А потом, на выходе функции, в этой динамической памяти мы работаем опять с переменной структуры в ней. А если в этот момент времени кто-то покоцает эту динамически выделенную память?
|
|
|
|
|
Apr 8 2016, 10:38
|
Частый гость
 
Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364

|
Цитата(Сергей Борщ @ Apr 8 2016, 14:18)  Вы, вероятно, неправильно понимаете термин " куча" (heap). Вам не зря про malloc писали. Если память выделена в куче - она зарезервирована и никто ее затереть не сможет, разве что только захочет намеренно испортить, но намеренно можно испортить совершенно любую переменную. Я думал, что куча это типа мусорки и временно в ней создаем переменную (держим над мусорным ведром пока что), что-то делаем, а на выходе из функции бросаем ее в мусорное ведро (а там внутри что-то типа шреддера стоит и перемалывает это наш мусор). И больше, после выхода из функции, не надо лазить в это мусорное ведро и копаться в нем в поисках еды нашей переменной. Вот так думал если по "колхозному" пояснить.
|
|
|
|
|
Apr 8 2016, 10:53
|
Частый гость
 
Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364

|
Цитата(Сергей Борщ @ Apr 8 2016, 14:36)  ...А если кто-то затрет все ОЗУ?  Цитата(Сергей Борщ @ Apr 8 2016, 14:41)  Я вам даже ссылку привел. А вот чтение информации из интернета вслух - 100 евро в час, увы. Большое Вам спасибо за нужное направление. И отдельное спасибо в первую очередь des333! До меня дошло более-менее, но самое главное не это в итоге! А то что если это так, то где-то тут пропущен оператор free!!! А в примере его как раз и нету! "Ти-ти" как говорит мне сынишка (3 года, а на грузовик говорит - "говивик" и т.п.). А это значит...
|
|
|
|
|
Apr 8 2016, 17:24
|
Частый гость
 
Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364

|
Цитата(ar__systems @ Apr 8 2016, 18:08)  Вообще это довольно дерзко, не особо и в С понимая, вот так сходу брать и обвинять LwIP в глючности. Я бы посоветовал брать за аксиому, что там все правильно, а если вам кажется иначе, искать ошибки в вашем понимании С вообще и программы в частности. А Вы в C понимаете??  Тогда бы и объяснили чего и как . Тут объяснили.  Мне люди тут и объяснили подробно и доходчиво - свое время потратили и ссылку привели и не одну. Вот им сто раз спасибо готов говорить за это (только так и могу - форум ведь все-таки тут). А Вы вот только под конец написали свое мнение по-этому поводу. Резюме так сказать. И что же?  Вот что. А вообще такое предвзятое отношение к этому LwIP у меня не просто так, а вот стал проверять его работу и что-то нестабильной она показалась сильно. Стал изучать потихоньку что и как и вот в этой теме и спросил один из моментов при этом. В разделе "Для начинающих" между прочим. Ну не приходилось мне особо применять динам. выделение памяти (может даже и к лучшему это вообще-то т.к. темный лес еще тот). У меня другой сетевой стек работал месяцами не выключаясь. Больше полгода - точно было, а больше не получилось только потому что отключали для плановой замены буферного акк-ра или когда ремонт делали в комнате. А вот насчет LwIP-а что-то я совсем не уверен, что такое будет. Вообще не уверен. Поживем - увидим как говорится.
|
|
|
|
|
Apr 10 2016, 08:18
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(AleksBak @ Apr 8 2016, 23:24)  А Вы в C понимаете??  Тогда бы и объяснили чего и как . Тут объяснили.  Мне люди тут и объяснили подробно и ... В разделе "Для начинающих" между прочим. Ну не приходилось мне особо применять динам. выделение памяти (может даже и к лучшему это вообще-то т.к. темный лес еще тот). Если Вы не можете разобраться в паре строк простого кода, то очевидно, советовать можно только изучать учебник по си - все остальные советы бессмысленны. Да и разделом Вы ошиблись, тут где-то был раздел "Для совсем начинающих", Вам туда, пока язык не изучите. Динамическим выделением памяти и кучей в исходной функции даже не пахнет. Откуда Вы его постоянно приплетаете? Создаётся впечатление, что Вы не знаете что это такое, как впрочем и что такое "локальная переменная". В исходной функции идёт обычный возврат данных через указатель. Если даже такое не понятно - только учебник.
|
|
|
|
|
Apr 10 2016, 08:31
|
Частый гость
 
Группа: Участник
Сообщений: 132
Регистрация: 6-02-16
Из: г. Баку
Пользователь №: 90 364

|
Цитата(jcxz @ Apr 10 2016, 12:18)  ... Динамическим выделением памяти в исходных функциях даже не пахнет... Что Вы говорите?  Неужели??? Тут значит уже статическое выделение памяти под переменную? Да ну?? Мне тут люди уже ответили и пояснили популярно что и как и где я был не прав. Все я признаю и благодарен им. А Вы можете дальше не пояснять т.к. толку будет абсолютный нуль. Неделю назад Вы конкретно заявили, что STM32F030 это Cortex-M3 серия и что? Запомнил как раз Ваш пост и ник (!). Еще раз повторяю для любителей впустую писать - мне тут все ответили люди и пояснили. Огромное спасибо им. И все. Понятно да?
|
|
|
|
|
Apr 10 2016, 08:45
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(AleksBak @ Apr 10 2016, 14:31)  Что Вы говорите?  Неужели??? Тут значит уже статическое выделение памяти под переменную? Да ну?? Ни динамических ни статических выделений памяти там вообще нет никаких. Ни одного.Цитата(AleksBak @ Apr 10 2016, 14:31)  Неделю назад Вы конкретно заявили, что STM32F030 это Cortex-M3 серия и что? Запомнил как раз Ваш пост и ник (!). Ложь. Cortex-M3 - это не серия (серия чего???), это ядро. И утверждать на каком ядре построен STM32F030 я не мог, так как не знаю этого, и мне это не интересно. PS: Очевидно Вы даже читать не умеете, то что Вам написали.
|
|
|
|
|
Apr 10 2016, 09:19
|
Частый гость
 
Группа: Участник
Сообщений: 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 эта обертка под получение этого элемента очереди в ОС. А насчет ядра и серии - да я очень грубо ошибся и не пойму как такое слово мог написать. Ядро конечно это. Еще какие ошибки у меня тут есть?? Мне значит тогда совсем закопаться и в школу пойти так да? Вот я сижу-пишу как дурак эти строчки, чего-то доказываю, а двое спиногрызов (дети) реально в этот момент меня задалбливают.  Один со своими машинками лезет, а другая чем-то недовольна и кричит громко в ответ.
|
|
|
|
|
  |
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0
|
|
|