LINUX.ORG.RU

Релиз Clang с новой технологией проверки безопасности кода

 , ,


0

2

Увидел свет новый выпуск являющегося частью проекта LLVM компилятора Clang с технологией SAFECode.

Данная технология предназначена для отслеживания возможных проблем работы с памятью в разрабатываемом приложении, при этом не изменяет поведение компилятора, когда неактивна. Включить её можно через указание специального ключа командной строки при сборке. Преимуществами по сравнению с таким инструментом как Valgrind являются:

  • более информативные сообщения об ошибках;
  • возможность оптимизации некоторых run-time проверок;
  • отсутствие динамической трансляции как у Valgrind;
  • более точно определяет структуру программы, так как знает расположение границ отдельного стека и глобальных объектов (для поиска данных границ Valgrind использует эвристические методы).

Сейчас технология позволяет отслеживать разыменования указателей, которые могут спровоцировать переполнение буфера. В дальнейшем планируется внести из проекта SAFECode в Clang:

  • выявление некорректного доступа к памяти (указатели на несуществующий или удаленный объект);
  • определение неправильных вызовов функции free(), например, двойное освобождение выделенной памяти;
  • определение использования неинициализированных указателей;
  • выявление ошибок при работе с памятью, вызванных неправильным использованием функций стандартной библиотеки;
  • дополнительные оптимизации, включая удаление проверок корректности типов на этапе загрузки/сохранения и вынос за пределы циклов.

Clang это фронт-энд компиляторов С/С++, Objective-C, который разрабатывается на замену GCC в BSD-системах. Интересен может быть также крупным корпорациям благодаря лицензии BSD. При помощи Clang уже удалось собрать ядро Linux и фреймворк Qt.

Исходный код

Страница проекта

>>> Подробности

★★★★★

Проверено: JB ()
Последнее исправление: Dendy (всего исправлений: 5)

он уже не сегфолтитса?

anonymous
()
Ответ на: комментарий от Buy

>Все лицензии ограничивают свободу и в этом плане «ущербные». Каждая делает это своим «подлым», уникальным методом.

WTFPL

BSD обеспечивает больше свободы в понятии: «я ХОЧУ закрыть производный код», но этим же и ограничивает других в возможности увидеть этот закрытый код и продолжить с ним работать

ты бредишь, лицензия не может давать прав на чужой код, а на сам BSDшный код любуйся - не хочу

annulen ★★★★★
()
Ответ на: комментарий от anonymous

> Common Lisp, Scheme, Haskell Есть все необходимые инструменты для создания пользовательских интерфейсов и прикладного программирования.

Это в теории? Или ты правда писал на хаскеле GUI, ну, скажем, под Qt?

Никто в здравом уме не начнёт писать на нём новый проект (по крайней мене, в цивилизованном мире).

Точно, поэтому в цивилизованном мире на каждом шагу так и видишь GUI на scheme и haskell-е. На питоне - да, пишут, на java пишут, на C++, ясное дело, пишут, даже на mono пишут, а что есть на хаскеле? Посмотри-ка сейчас на свой экран и найди хоть одно. :)

anonymous
()
Ответ на: комментарий от Deleted

> BSDL - не свободная? О_о

Конечно, еще какая! Ведь есть WTFPL.

По своей сути лицензия BSD бессмысленна. Она просто не нужна, ни для чего.

Лицензию всегда выбирает автор. Те авторы, которые хотят выложить свой код под действительно свободной лицензией - выкладывают его в Public Domain (или под WTFPL, что юридически более надежно, т.к. Public Domain есть не во всех странах). Те, кто хотят гарантировать, что их код будет оставаться открытым, кто бы и в каком бы приложении его не использовал - выкладывают его под [L]GPL. А какой смысл выкладывать код под BSD?

anonymous
()
Ответ на: > BSDL - латентно-проприетарной лицензией от paranormal

> На домашнем сервере уже отказался от gcc, все собирает clang. Прирост скорости сборки заметен даже визуально.
[...]

У меня freebsd установленна на ноуте, я с нее работаю.


Тогда, конечно, понятна любовь к Clang, но, тем не менее... живой BSD-шник с BSD на ноуте? Правда? Из любопытства, там же не консоль? Какой DE, какой браузер, какие видео и аудио-плееры, чем смотрятся фотки, какие игры нынче в моде на BSD? Как давно система переустанавливалась с нуля?

Или там, как обычно, винда в дуалбуте, а BSD используется, в лучшем случае, чтобы веб почитать на да лоре потроллить?

anonymous
()
Ответ на: комментарий от AST-PM-105

> Я кстати заметил, что одни и те же люди выступают и против clang, и против wayland.

Не, все как раз наоборот. Clang/LLVM - это забавная игрушка. Она не претендует на замену gcc, и никогда не претендовала. Точно так же как icc, clang/llvm - это просто еще одна альтернатива, причем имеющая свои плюшки. Так, благодаря Clang/LLVM/Emscripten стало возможно транслировать движок дума в javascript-ы. Да, оно падало, а те, кто видели сгенерированный код, плакали горючими слезами, но тем не менее оно работало. Это - реально рабочий проект, у которого есть интересные идеи и интересные реализации.

Wayland же - это чистый фанатизм, за ним нет ни новых идей ни интересных реализаций. Есть только пара helloworld-ов и презентаций, остальное в нем может быть когда-нибудь будет возможно, да и то вряд ли.

Так что между противниками clang и wayland нет почти ничего общего. Зато фанаты у clang и wayland часто одни и те же - это все те, кто ведутся на маркетинг «новое это круто!». Причем большинство из фанатов никогда не видели ни того, ни другого.

anonymous
()
Ответ на: комментарий от anonymous

> Common Lisp, Scheme, Haskell

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

В перспективу смотрят немного языков: D, Nemerle, C#, возможно какая-нть реинкарнация жабы в виде Scala. Плюс скриптовички-боровички Пистонорубы.

matumba ★★★★★
()
Ответ на: комментарий от matumba

А что плохого в маргинальности языка, собственно? Любой внутрикорпоративный DSL вообще маргинальнее некуда - а ведь используются они повсеместно. Отсутствие библиотек не проблема, если задача специфическая или если FFI есть.

Вообще удивляют меня все эти религиозные разборки. Проще надо быть. Есть задача, есть множество возможных решений - выбирай себе то, что в данный момент, при данных условиях будет самым быстрым и удобным. Без религии, без ублюдочного бреда про GPL, «свободу», «маргиналов», и т.п.

Или тут все слишком юные, чтобы такие простые вещи понимать?

anonymous
()
Ответ на: комментарий от anonymous

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

Немаргинальность языка - это тоже критерий выбора.

Без религии, без ублюдочного бреда про GPL, «свободу», «маргиналов», и т.п.

Или тут все слишком юные, чтобы такие простые вещи понимать?

Или ты слишком юн, чтобы понимать, что твои критерии выбора и представления об «ублюдочности» такие твои.

tailgunner ★★★★★
()
Ответ на: комментарий от hizel

> соревнуетесь во вбросах?

Вот если-бы brainfuck упомянули - то был-бы вброс.

А это так... Сореваньице в остроумии для тех, кто в предыдущем флэйме не поучаствовал.

sergv
()
Ответ на: комментарий от anonymous

:) вроде живой...

1) правда. 2) консоль тоже есть, но практически не пользуюсь. 3) gnome 4) firefox/vimperator 5) mplayer, sonata 6) gthumb 7) quake, doom но вообще играю редко 8) пол года назад при покупке ssd веника.

У меня только одна OS на лаптопе.

paranormal ★★
()
Ответ на: комментарий от anonymous

>>>Рассказать им, что-ли, про современные языки программирования

А на каких современных языках нам делать десктопные приложения, рассказывай быстрее.

Objective-C.

anonymous
()

> который разрабатывается на замену GCC в BSD-системах

а почему вдруг только в BSD-системах?!?!?!

замечательно было бы заменить им G++ в уютненьком линуксе, cygwin-e и в debian/gnu-kfreebsd

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от AST-PM-105

> одни и те же люди выступают и против clang, и против wayland

Это тебе показалось. Я, например, всеми лапами за clang. Вернее за LLVM целиком, а это существенно более обширная вещь, чем gcc.

А wayland не решает ни одной проблемы иксов, зато создает кучу собственных. На десктопе ему не место ни в ближайшей, ни в средней перспективе. А в долгосрочной лучше бы делали аналог Core Graphics.

baka-kun ★★★★★
()
Ответ на: комментарий от tailgunner

>> Было уже - GCC-XML. И где оно сейчас?

Живо и работает.


Главная его проблема, как и любых других сторонних патчей, затрагивающих потроха gcc или его промежуточное представление, — результат работы будет под GPLv3.

Да-да, результат работы компилятора будет под GPLv3 независимо от воли автора компилируемого кода.

baka-kun ★★★★★
()
Ответ на: комментарий от anonymous

> Конечно, еще какая! Ведь есть WTFPL.

Которая накладывает одно ма-аленькое условие: «changing it (document) is allowed as long as the name is changed».

Те, кто хотят гарантировать, что их код будет оставаться открытым…

Код под /любой/ FOSS лицензией закрыть невозможно.

baka-kun ★★★★★
()
Ответ на: комментарий от baka-kun

> Главная его проблема, как и любых других сторонних патчей, затрагивающих потроха gcc или его промежуточное представление, — результат работы будет под GPLv3.

И ты, конечно, можешь предоставить пруф?

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

>>А на каких современных языках нам делать десктопные приложения, рассказывай быстрее.

Objective-C

Неудобно. Есть ещё предложения?

Hug37r011
()
Ответ на: комментарий от baka-kun

результат работы компилятора будет под GPLv3 независимо от воли автора компилируемого кода.

Это правда? И почему gcc до сих пор не заменили таким замечательным компилятором?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от baka-kun

> результат работы будет под GPLv3.

Бред. GCC Runtime Library Exception гарантирует, что «if you use GCC, with or without GPL-compatible enhancements, that would be an Eligible Compilation Process».

anonymous
()
Ответ на: комментарий от tailgunner

> И ты, конечно, можешь предоставить пруф?

По-моему, уже тысячу раз обсасывали.

Начиная с того, что за gcc таскается GCC Runtime, части которого «are automatically used by the object code that GCC produces», а сам exception упирается в «Eligible Compilation Processes». При этом явно заявляется, что любое промежуточное представление НЕ является результатом компиляции.

Продолжая тем, что rms, не посоветовавшись с юристами, договорился до того, что компилируя i = 2 + 2; gcc инлайнит собственную реализации «2 + 2» (которая под GPLv3), поэтому любой скомпилированный код — производная работа («since all binaries are derivative of GCC anyway…»), а поэтому только великой милостию Его исключения нам позволено использовать наш собственный код.

Заканчивая тем, что gcc специально предпринимает шаги, чтобы результат работы компилятора оказался производной работой. rms так борется с проприетарными плагинами: без этого никто не мешает вытащить IR, оптимизировать «супер-пупер качественными закрытыми алгоритмами» и впихнуть обратно. Результат будет лучше, чем у «просто gcc», а руки на оптимизатор не наложишь. Целая команда несколько лет решала эту «проблему» (Eben Moglen, David Edelsohn и т.д.).

Собственно, вся проблема началась именно из-за страха, что кто-то улучшит gcc. Доигрались до того, что на подходе уже пара коммпиляторов, которые архитектурно лучше, да LLVM, который вообще из другой лиги.

baka-kun ★★★★★
()
Ответ на: комментарий от baka-kun

> Начиная с того, что за gcc таскается GCC Runtime

...которое под «заразной» GPL (то есть обычное заражение через линковку), из-за чего и понадобилось GCC Runtime Library Exception.

Начиная с того, что за gcc таскается GCC Runtime, части которого «are automatically used by the object code that GCC produces», а сам exception упирается в «Eligible Compilation Processes»

И?

«A Compilation Process is „Eligible“ if it is done using GCC, alone or with other GPL-compatible software, or if it is done without using any work based on GCC. For example, using non-GPL-compatible Software to optimize any GCC intermediate representations would not qualify as an Eligible Compilation Process.»

Обрати внимание, специально заявлено: «using non-GPL-compatible Software to optimize any GCC intermediate representations would not qualify as an Eligible Compilation Process». Не сказано, что, промежуточное представление автоматически попадает под GPL (как утверждаешь ты).

Более того, прямо заявлено, что: «even if someone writes a plugin that saves this information to disk, any programs that change the structures before GCC writes out Target Code will be involved in the Compilation Process. If that program is proprietary, the exception will not be available to any software compiled with it».

Что непонятно во фразе «if that program is proprietary»? Пока все инструменты, работающие над выданным промежуточным представлением, GPL-совместимы, процесс компиляции является eligible.

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

Да, и что? Ты утверждаешь буквально следующее:

baka-kun> результат работы компилятора будет под GPLv3

А цель в том, чтобы сохранить иметь под GPL всё, что работает над промежуточным представлением. Не само промежуточное представление, а именно инструменты работы с ним.

Короче, то, что ты сказал, строго говоря, неверно, а говоря щире - FUD.

tailgunner ★★★★★
()
Ответ на: комментарий от alx_me

>>> Я не проприэтарщик и испытываю неудобства от этой лицензии ЧЯДНТ.

Хотите приватизировать прибыль и социализировать издержки. Хотите никому не платить за ПО, пользоваться им, и одновременно не участвовать в борьбе позволившей создать такое ПО.

Пользуую BSDL ПО нашару. Ни кому не плачу. Комичусь в BSDL проект. ЧЯДНТ?

yurkis
()
Ответ на: комментарий от anonymous

>Тогда, конечно, понятна любовь к Clang, но, тем не менее... живой BSD-шник с BSD на ноуте? Правда? Из любопытства, там же не консоль? Какой DE, какой браузер, какие видео и аудио-плееры, чем смотрятся фотки, какие игры нынче в моде на BSD? Как давно система переустанавливалась с нуля?

Там кеды 4.6.чего-то там. Cromem firefox, все как у всех. На десктопе только pc-bsd. Песеустанавливалась не так давно с выходом 9beta. До этого около года 8.1 как единственная в доме система.

Или там, как обычно, винда в дуалбуте, а BSD используется, в лучшем случае, чтобы веб почитать на да лоре потроллить?

Иногда- больше: пару месяцев иногда PC-BSD в VBOX на ноуте жены под Win7.

PS clang действительно очень неплох. После него как минимум сообщения об ошибках gcc кажуться невменяемыми. Да и скорость компиляции... (Это из личного опыта)

yurkis
()
Ответ на: комментарий от tailgunner

> И?

Что «И?»?

Исключение покрывает только случай использования оригинального gcc, с опциональной модификацией IR сторонним GPL-compatible ПО (плагином, внешней по отношению к gcc сущностью).

Если используется производная от gcc работа (gcc-xml, например), то всё — приплыли: исключение работает только «if it is done without using any work based on GCC». Заметь: «any»!

результат работы компилятора оказался производной работой

Да, и что?

Да нет, ничего. Это как если бы сжатие GNU zip или форматирование GNU indent делало содержимое производной работой.

baka-kun ★★★★★
()
Ответ на: комментарий от Quasar

> Ты бредишь. GPLv3 не против СПО. Такие неудобства в первую очередь для проприетарщиков.

Какой качественный понос. GPL v3 требует что бы все были GPL, и им плевать на твое мнение по этому поводу. Хочешь ты BSDL, MIT или еще что-то. GPL v3 требует быть GPL и только GPL. Это называется не против СПО ? Тогда ты можешь пойти и убиться об стену кровопийца на теле СПО.

anonymous
()
Ответ на: комментарий от www_linux_org_ru

> который разрабатывается на замену GCC в BSD-системах

а почему вдруг только в BSD-системах?!?!?!
замечательно было бы заменить им G++ в уютненьком линуксе, cygwin-e и в debian/gnu-kfreebsd

У вас уже есть gcc, зачем вам больше? gcc ведь такой удобный и хороший ? или нет ? что ж вы тянетесь к такой противной лицензии как BSDL ? найди в себе силу откажись от всех продуктов под этой мерзкой лицензией!

anonymous
()
Ответ на: комментарий от yurkis

ошибки... ошибки...

> PS clang действительно очень неплох. После него как минимум сообщения об ошибках gcc кажуться невменяемыми.

Вы б хоть примеры показали какие-нибудь для тех, кто не знает, о чем речь. Чем именно вывод clang-а лучше вывода gcc? Вот, например, код с ошибкой:

#include <list>
#include <string>
typedef std::list<std::string*> L;
int main()
{
  L l;
  for (L::iterator it = l.begin(); it != l.end(); it++)
    it->clear();
  return l.size();
}
gcc выдает:
test.cpp:8: ошибка: запрос элемента ‘clear’ в ‘* it.std::_List_iterator<_Tp>::operator-> [with _Tp = std::string*]()’, имеющего не классовый тип ‘std::string*’
И по ней видно, что у ‘std::string*’ нет метода ‘clear’, потому что он не класс.
Clang выдает:
test.cpp:8:9: error: member reference base type 'std::basic_string<char> *' is not a structure or union
Из которого тоже видно, что проблема в том, что указатель не является структурой.

Да, выводы разные, но чем вывод clang лучше? Как по мне, информативность у них одинаковая. А если придираться, то можно сказать, что вывод gcc более понятен, т.к. явно говорит «класс», а не «структура», и явно указывает на ‘std::string*’, который есть в коде, а не на какой-то ‘std::basic_string<char> *‘, которого и в коде-то не было.

> Да и скорость компиляции... (Это из личного опыта)

У паскаля тоже скорость компиляции высокая. Высокая скорость компиляции обычно означает плохую оптимизацию и медленную скорость работы.

anonymous
()
Ответ на: ошибки... ошибки... от anonymous

эээ.. ты вобще с головой дружишь? там не std::string а итератор - это разные типы данных :)

и ошибка в том что у итератора нету такого метода - а сам итератор по умолчанию возвращает std::string*.

к которому уже пытаются применить -> и получить что-то.. Вот я с тебя «улыбаюсь» - выучись детка сначала, а потом коментируй.

anonymous
()
Ответ на: комментарий от anonymous

> там не std::string а итератор - это разные типы данных :) к которому уже пытаются применить -> и получить что-то..

Ты мне пытаешься рассказать, в чем там ошибка? Так я итак знаю. Там же русским языком написано «код с ошибкой». Для непонятливых, ошибка в коде была сделана СПЕЦИАЛЬНО.

Вот я с тебя «улыбаюсь» - выучись детка сначала, а потом коментируй.

Улыбка у тебя странная. :) Если бы ты, «детка», сначала прочитал написанное, а потом подумал головой, то понял бы, что речь шла о том, что в clang-е сообщения об ошибках лучше. Вот для того, чтобы сравнить эти сообщения об ошибках, внезапно, надо скормить компилятору ошибочный код.

anonymous
()
Ответ на: комментарий от baka-kun

> Исключение покрывает только случай использования оригинального gcc, с опциональной модификацией IR сторонним GPL-compatible ПО

Нет.

Цитата с http://www.gnu.org/licenses/gcc-exception-faq.html : «if you use GCC, with or without GPL-compatible enhancements, that would be an Eligible Compilation Process». Т.е. ты можешь использовать модифицированный GCC - как раз случай GCC-XML.

Если используется производная от gcc работа (gcc-xml, например), то всё — приплыли: исключение работает только «if it is done without using any work based on GCC». Заметь: «any»!

Нет.

Цитата с http://www.gnu.org/licenses/gcc-exception.html : «Compilation Process is „Eligible“ if it is done using GCC, alone or with other GPL-compatible software». Заметь «alone or with other GPL-compatible». GCC-XML вполне GPL-compatible, так что и с этой стороны исключение в силе.

Это как если бы сжатие GNU zip или форматирование GNU indent делало содержимое производной работой.

FUD.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Нет.

Да. Если ты считаешь, что я не прав, то потребуется доказать утверждение: «gcc-xml — это GCC».

Я же утверждаю, что gcc-xml — это производная работа, work based on GCC.

Compilation Process is «Eligible» if it is done using GCC, alone or with other GPL-compatible software". Заметь «alone or with other GPL-compatible

Не забудь добавить «if it is done without using any work based on GCC».

Перевожу:

Если использовался только GCC, либо GCC совместно с другим GPL-ПО, либо совсем не использовалось любое производное от GCC ПО, то это нам подходит, возьми конфетку.

FUD

Покажи мне другой компилятор, который накладывает ограничение на оттранслированный им код.

baka-kun ★★★★★
()
Ответ на: комментарий от baka-kun

> Если ты считаешь, что я не прав, то потребуется доказать утверждение: «gcc-xml — это GCC».

Ничего подобного доказывать не нужно. Любой GPL-совместимый инструмент сохраняет процесс Eligible.

Compilation Process is «Eligible» if it is done using GCC, alone or with other GPL-compatible software". Заметь «alone or with other GPL-compatible

Не забудь добавить «if it is done without using any work based on GCC».

Давай-ка полную цитату, с источником.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Ничего подобного доказывать не нужно.

Нужно, поскольку исключение прямо говорит: либо используй для компиляции целиком gcc, возможно в комплекте с другими GPL-совместимыми утилитами (плагинами), либо не используй никаких производных от gcc работ совсем.

На входе компиляции должен быть исходник, а на выходе обязан быть только готовый бинарник или код ассемблера (то, что отдается ассемблеру, линкеру или загрузчику). Никакие промежуточные данные работы gcc результатом компиляции не являются в любом виде, и их использование отдельно нарушает исключение.

Давай-ка полную цитату, с источником.

Прочитай уже наконец само исключение, а не путанные комментарии, которые регулярно правят.

baka-kun ★★★★★
()
Ответ на: комментарий от baka-kun

> прямо говорит: либо используй для компиляции целиком gcc, возможно в комплекте с другими GPL-совместимыми утилитами (плагинами), либо не используй никаких производных от gcc работ совсем.

Оно говорит, что ты имеешь право использовать модифицированный GCC. если модифиуации GPL-совместимы. Приведу цитату последний раз - на случай, что ты просто ошибаешься, а не залочил мозги по религиозным причинам:

«if you use GCC, with or without GPL-compatible enhancements, that would be an Eligible Compilation Process»

Давай-ка полную цитату, с источником.

Прочитай уже наконец само исключение

Я его читал и цитировал.

</thread>

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> ты имеешь право использовать модифицированный GCC

Я бы сейчас пустился в рассуждения, что «модифицированный GCC» и «работа, основанная на GCC» — это две большие разницы (юридически это так), и что gcc-xml явно является вторым, но пока не буду.

Я лучше удивлюсь: это ты где такую цитату взял? Исключение говорит немного другое:

«A Compilation Process is «Eligible» if it is done using GCC, alone or with other GPL-compatible software, or if it is done without using any work based on GCC».

Давай основывать свои аргументы на оригинале, а не том, что «Моня напел».

baka-kun ★★★★★
()
Ответ на: комментарий от anonymous

> У вас уже есть gcc, зачем вам больше? gcc ведь такой удобный и хороший ? или нет ? что ж вы тянетесь к такой противной лицензии как BSDL ? найди в себе силу откажись от всех продуктов под этой мерзкой лицензией!

может быть ты обращаешься немного не по адресу, т.к. я выступаю за bsd и lgpl, но против gpl

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от anonymous

епрст, по какой-то причине запретили анонимусов:

Ограничение на отправку комментариев: только для зарегистрированных пользователей, score>=0

www_linux_org_ru ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.