sh.*_*.ll 59 c pointers function-pointers function
我正在解决 picoCTF 上的二进制开发挑战,并遇到了这段代码:
((void (*)())buf)();
Run Code Online (Sandbox Code Playgroud)
哪里buf是字符数组。
我解决了挑战,但似乎无法理解它到底在做什么。我看着这个线程,但我无法理解。
什么((void (*)())buf)();意思?
Som*_*ude 132
void (*)() 是一种类型,该类型是“指向采用不确定参数且不返回值的函数的指针”。
(void (*)()) 是上述类型的类型转换。
(void (*)())buf强制转换buf为上述类型。
((void (*)())buf)() 调用函数(不传递参数)。
简而言之:它告诉编译器将其buf视为指向函数的指针,并调用该函数。
它将字符数组转换为指向不带参数并返回 的函数的指针void,然后调用它。由于函数指针的工作方式,不需要取消引用指针。
一个解释:
那个“字符数组”实际上是一个机器码数组。当您将数组转换为 avoid (*)()并调用它时,它会在数组内运行机器代码。如果你提供了数组的内容,我可以为你拆解它并告诉你它在做什么。