I am solving a binary exploitation challenge on picoCTF and came across this piece of code:
((void (*)())buf)();
where buf
is a character array.
I solved the challenge but can't seem to understand what exactly it's doing. I looked at this thread but I couldn't make it out.
What does ((void (*)())buf)();
mean?
void (*)()
is a type, the type being "pointer to function that takes indeterminate arguments and returns no value".
(void (*)())
is a type-cast to the above type.
(void (*)())buf
casts buf
to the above type.
((void (*)())buf)()
calls the function (passing no arguments).
In short: It tells the compiler to treat buf
as a pointer to a function, and to call that function.