Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Переполнение буфера: что тут происходит? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ inline assembler VS чтение по указателю http://www.cyberforum.ru/cpp/thread580972.html
Доброе время суток. Задача состоит в чтении 1 байта по адресу указателя. Проблема с пониманием, что не так с типами операндов. char readFromPointer(char* pointer) { char result; __asm mov...
C++ Внутренняя организация базы данных Нужно написать небольшую консольную бд на с++, хотел бы посмотреть реальные примеры. Подкиньте парочку посмотреть пожалуйста :) В инете конечно полно примеров БД на visual c++ (mfc например), но там... http://www.cyberforum.ru/cpp/thread578836.html
C++ Как добавить смещение в программу в формате exe
хотелось узнать возможно добавить смещение в программу, тоесть к примеру есть код в программе от 0х1 до 0х100 можно ли как нибудь создать адресс к примеру 0х125 и вписать туда какое то значение???...
C++ Программа для скачивания файлов используя прокси
Здравствуйте! Пробую написать программу которая качает некие заданные файлы с интернета, но при этом использует соединение через прокси. Подскажите как "обьяснить" программе чтоб она качала через...
C++ Что за книга ГОФ? http://www.cyberforum.ru/cpp/thread574911.html
Посоветовали почитать "гофа", но поиск в рунете ни к чему разумному не привел.
C++ Возвращение ссылки на локальный объект Что за бред, приписывайте, пожалуйста, в конце, что это только Ваше мнение. Хоть и бредовое. int& foo() { int a; //: warning C4172: возвращение адреса локальной или временной... подробнее

Показать сообщение отдельно
farewell
1 / 1 / 0
Регистрация: 27.03.2010
Сообщений: 27

Переполнение буфера: что тут происходит? - C++

21.05.2012, 20:25. Просмотров 2414. Ответов 6
Метки (Все метки)

Добрый вечер; у меня есть уязвимая программа, которая в буфер длиной 30 копирует строку, переданную как аргумент этой программе. Делал по этой статье. Задача - осуществить вызов командной строки. В общем, после переполнения стек выглядит вот так:
[AAA...AAA] - буфер
[AAAAAA] - EBP
[адрес функции system()] - адрес возврата
[адрес exit()]
[адрес cmd.exe] - аргумент для функции system()
Как я понимаю, после завершения копирования делается прыжок по адресу возврата, и у нас вызывается функция system(). Эта функция нуждается в аргументе, берёт его из вершины стека (у нас наверху стека - адрес cmd.exe) А что происходит дальше? Судя по происходящему, моя программа корректно завершается, то есть выполняется функция exit(). Вопрос: почему она выполняется? У нас же в стек записан не её код, а всего лишь её адрес, почему происходит прыжок по нему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru