Показаны сообщения с ярлыком c. Показать все сообщения
Показаны сообщения с ярлыком c. Показать все сообщения

четверг, 26 января 2012 г.

Переполнение буфера: теория и практика

Переполнение буфера (Buffer Overflow) — явление, возникающее, когда компьютерная программа записывает данные за пределами выделенного в памяти буфера.

Во многих источниках переполнение буфера называют самой распространенной уязвимостью программного обеспечения. Переполнение буфера присуще не только обычному ПО для PC, но также и программному обеспечению ряда аппаратных средств. Примером может служить уязвимость принтера HP LaserJet 4500, обнаруженная в 1999-ом году. Ниже будет немного теории и пример уязвимости переполнения буфера в программе.

понедельник, 5 декабря 2011 г.

Первая статья на хабре

Опубликовал свою первую статью на хабре. В статье проводится разбор исходного кода утилиты yes из набора GNU Coreutils. Моей целью было посмотреть, как программируют бородатые дядьки на C, чему-то научиться у них. Статью приняли хорошо, намного лучше, чем я ожидал. Многие добавили статью в избранное, что особенно приятно.

среда, 27 апреля 2011 г.

GNU Make и автоматическая генерация зависимостей для файлов исходного кода C/C++

Для знающих проблема известная и давно решённая, но я с этим столкнулся только сегодня.

Итак, у нас имеется небольшой проект на C/C++, который собирается с помощью make. Пусть это будет программа под названием «program». В Makefile написано примерно следующее:
OUT = program

CXXFLAGS = -Wall -c -O2

SRC = $(wildcard *.cpp)
# Expand SRC wildcard and replace extension from .cpp to .o
OBJ = $(patsubst %.cpp, %.o, $(SRC))

$(OUT): $(OBJ)
    $(CXX) -o $(OUT) $(OBJ)
Когда мы изменяем какой-нибудь файл исходного кода foo.cpp и собираем проект, всё работает как часы: make замечает изменение foo.cpp, заново его (и только его) компилирует и запускает линковщик. Но make не замечает изменений в заголовочном файле foo.h, который подключается из foo.cpp.