LINUX.ORG.RU

Сообщения Correra

 

Выполнение многократного переполнения буфера

Форум — Development

Вопрос на понимание. Вижу, что работает, не понимаю, почему.

Дано: прога с уязвимостью test void func (void) { gets (small); printf ("%s\n", small); }

int main (void){ func (); return (0); }

Дано: прога, формирующая буфер proc int main (void){ int i = 0; char buf[56]; memset (buf, 0x20, 34); for (i = 32; i <= 52; i += 4) // Адрес функции func в исполняемом test *(long *) &buf[i] = 0x83a40804; //gdb test; disas main puts (buf); return (0); }

Запуск в баше: 1) ./test string string 2) ./proc 8

Далее: (./proc;cat) | ./test 8 1 1 2 2 ... 6 Ошибка переполнения

Т.е. один раз переполнили буфер, а дальше подавали инфу с cat

Понятно, что на промежутке i = 32 <= 52 адрес уложили 6 раз, но почему сработало? Не могу осознать механизм "подтягивания" того, что оказалось за пределами буфера с каждым новым вызовом func.

Correra
()

Фильтр в функции scandir

Форум — Development

Необходимо получить список файлов из директории, удовлетворяющих шаблону "*name*"

В мане объявлено

int scandir (const char *dir, struct dirent ***namelist,

int(*select)(const struct dirent *),

int(*compar)(const struct dirent **, const struct dirent **));

В качестве функции сортировки предложены alphasort() и versionsort(), а вот фильтр, так понимаю, нужно писать свой.

int check (struct dirent * compare)

{

if (strsrt (compare->d_name, "name"))

return (1);

else

return (0);

}

Ворнинг при компиляции о несовместимости типов. Как должен выглядеть заголовок функции? Какой аргумент ей подсунуть?

Correra
()

Взаимодействие независимых процессов

Форум — Development

Доброго времени суток.

Имеется следующая задача: обеспечить передачу строки char * для "неродных" процессов.

Процесс 1: void main (void) { char buff [32]; gets (buff); puts ("I've got a message: "); puts (buff); } Предположим, он просто запускается в терминале.

Процесс 2: Это может быть что-нибудь с функцией print (pid_t PID_1, char * string); или вызов каких-то системных функций для использования общих потоков, или еще что.

Сразу оговорюсь, что команда в терминале ./proc_2 | ./proc_1 не подойдет, поскольку их будут запускать разные пользователи.

Были попытки сделать что-то в духе ps -a | grep proc_1 cd /proc/#proc_1#/fd echo "string" > 1 Но, по-моему, сообщение ушло только в терминал, а не попало на обработку процессом (не вывелось, в общем, ничего)

Подскажите, пожалуйста, каким путем лучше пойти: искать функции, позволяющие найти указатель на stdin другого процесса, или можно найти вход с терминала.

Благодарю за внимание :)

Correra
()

RSS подписка на новые темы