Я работаю над курсом, и мне поручено просмотреть и настроить немного Си-кода.Я никогда не писал C ни дня в своей жизни, однако мне удалось подобрать некоторые функции и выполнить упражнение :)
Во время упражнения я выделял пространство памяти в буфере и заполнял его.пробел с произвольными символами.Это было частью назначения переполнения буфера.
Я выучил две функции:
malloc(size_t) - allocates memory with a size_t
memset(ptr, bytes, space) - sets shellcode into the memory
Я буду использовать этот блок кода в качестве примера:
char *nop = malloc(10);
memset(nop, 0x00, 10);
memset(nop, 0x90, 10);
Мой вопрос касается кода выше,где я резервирую место в памяти и заполняю его nops.Зачем нужно, если вообще нужно, чтобы я сначала заполнял пространство нулевыми байтами, а потом переписывал желаемыми символами.
Будет ли работать то же самое или мне нужно сначала заполнить нулевыми байтами:
char *nop = malloc(10);
memset(nop, 0x90, 10);