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