Средства разработки приложений


История


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

Когда вы пишете программу на языке высокого уровня, таком, как С, компилятор переводит программу в машинный код. Машинный код, по существу, представляет собой последовательность инструкций низкого уровня и данных. Например, рассмотрим следующую основную программу: 1.main(){ 2.printf("Hello World"); 3.}

Знаменитая программа «Здравствуй, мир» создает 300 294 байта исполняемого кода при использовании компилятора 'С' GNU (GCC) в Windows NT, и это выглядит примерно так: 0x401000 55 89 e5 83 ec 10 83 3d 00 20 40 00 00 74 01 cc 0x401010 d9 7d fe 66 8b 45 fe 25 c0 f0 ff ff 66 89 45 fe … 0x401040 48 65 6c 6c 6f 20 57 6f 72 6c 64 00 55 89 55 89 0x401050 e5 e8 94 01 00 00 68 40 10 40 00 e8 92 01 00 00 0x401060 83 c4 …

Что-то довольно непонятное, не так ли? Эти числа - это то, что компьютер использует, когда исполняет написанную вами программу. Числа в этом коде представлены в шестнадцатеричном виде. Первая колонка представляет собой адрес памяти, где находится программа, а оставшиеся колонки показывают содержимое этих адресов памяти. Каждая колонка увеличивает значение адреса на единицу. Таким образом, по адресу 401000 хранится значение 55, по адресу 401001 хранится значение 89 и так далее. Некоторые из этих чисел - команды, которые говорят компьютеру, что делать, другие представляют собой данные, используемые компьютером. В данном случае компьютер берет первое значение, 55, и интерпретирует его как команду выполнить некоторое действие. Затем он переходит к следующему значению - 89. Компьютер знает, что команда 89 требует параметр, который хранится в следующем адресе и имеет значение е5. Таким образом, компьютер выполняет команду 89 е5 и затем переходит к значению, идущему следом за е5.


Начало  Назад  Вперед



Книжный магазин