#include <stdio.h>
#include <stdlib.h>
void badf(int n, char c, char* buffer)
{
int i;
for (i=0; i<n; i++)
{
buffer[i]=c;
}
}
void f(int n, char c)
{
char buffer[16];
badf(n,c,buffer);
}
void message ()
{
printf("Hello\n");
}
int main()
{
f(32,0x08048411);
return 0;
}
Это код, который я получил до сих пор (получил его основу и должен придерживаться его, поэтому есть функция badf и f)
Цель состоит в том, чтобы программа печатала сообщение Hello, переполняя указатель инструкции. Используя отладчик отображения данных в Ubuntu, я считаю, что адрес этого дисплея 0x0804811.
Когда я запускаю программу и использую x / 16x $ esp, следующий адрес в стеке составляет всего 1 с (я предполагаю, что только две последние цифры берутся из адреса выше)
Интересно, как сделать следующий адрес полным адресом, а не только двумя последними цифрами?
Также 32 вычисляется из 16 (определенный выше буфер) + 8 (базовый указатель) + 8 (указатель инструкций)
Заранее спасибо за любую помощь, поскольку я знаю эту конкретную проблему.