我有这段代码来测试 shellcode,但我不明白,所以谁能给我解释一下?
忘记汇编shellcode,我想了解的是C代码,
char shellcode[] = "...";
int main(int argc, char **argv)
{
int (*func)();
func = (int (*)()) shellcode;
(int)(*func)();
}
我的意思是一切,什么是空的()
,请像给初学者解释一样解释。
最佳答案
int (*func)();
这是一个函数指针的声明。函数指针本质上是一个保存函数地址的变量。在这种情况下,func
指向的函数类型是不带参数并返回 int
的函数类型。您可以像这样将函数的地址分配给此变量:
func = foo;
其中 foo
是一个原型(prototype)为 int foo();
的函数。
一旦函数被分配给这个变量,你就可以像这样调用func
指向的函数:
(*func)();
还有一个替代语法(等效),我认为更清楚:
func();
因此,如果将 foo
分配给 func
,那么上面的两个示例实际上都会调用函数 foo
。
您还可以将值转换为函数指针。在代码示例中
(int (*)())
是一个函数指针的转换,它不接受任何参数并返回一个 int
。这样编译器就不会提示将本质上是 char*
的内容分配给函数指针 func
。
在您上面给出的代码中,还有最后一件事。在调用 func
之后,结果(出于某种原因)被转换为 int
。据我所知,这个 Actor 阵容完全没有必要。所以最后一行
(int)(*func)();
可以替换为
(*func)();
关于c - 测试 shellcode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2797974/