Может ли кто-нибудь дать мне полное объяснение того, что происходит в этой второй строке кода?
Я знаю, что адрес буфера, содержащего шеллкод, передается в исполняемый указатель функции. Но я немного запутался со всеми фигурами и шагами, поэтому мне нужно более подробное объяснение.
unsigned char buf[] = "\x90\x90\x90\x90\x90\x90\x90\x90";
((void(*)())buf)();
Я попытался объяснить это себе следующим образом:
buf //address of the buffer containing code
void(*)() //"type" function pointer returning void, no parameters
(void(*)()) buf //cast buf to said type
( (void(*)()) buf )() //take the outcome of the cast and execute it by appending ()
Это правильно? Я хотел бы получить более подробное/правильное объяснение.
Спасибо заранее!
Edit: Я знаю, что DEP блокирует выполнение и что даже если он будет выполняться, программа выйдет из строя, потому что после NOP будет выполняться "случайный мусор". Мой вопрос касается только синтаксиса вызова функции.