测试shellcode

我有这段代码来测试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是原型int foo();的函数int foo();

将函数分配给此变量后,可以调用func指向的函数,如下所示:

 (*func)(); 

有一种替代语法(相当于),我认为更清楚:

 func(); 

因此,如果将foo分配给func ,那么上面的两个示例实际上都会调用函数foo

您还可以将值转换为函数指针。 在代码示例中

 (int (*)()) 

是对函数指针的强制转换,它不带参数并返回int 。 这样编译器就不会抱怨将基本上是char*内容分配给函数指针func

在上面给出的代码中,还有最后一件事。 调用func后,结果(由于某种原因)转换为int 。 据我所知,这次演员是完全没必要的。 所以最后一行

 (int)(*func)(); 

可以替换为

 (*func)(); 

int (*func)(); 是一个指向函数的指针的定义,返回类型为intfunc = (int (*)()) shellcode;shellcode[] (汇编程序字节码,CPU执行的指令), (int)(*func)();分配一个函数指针(int)(*func)(); 通过其地址(汇编程序指令)调用函数而不传递参数,因为指定了() 。 例如,汇编程序指令\x90具有名称NOPN o Op eration)并且不执行任何操作,其他汇编程序指令根据您正在执行它们的系统执行不同的操作。