测试shellcode

时间:2010-05-09 14:49:17

标签: c shellcode

我有这段代码来测试一个shellcode但是我不明白所以有人能解释一下吗?

忘记汇编shellcode,我想要理解的是C代码,

char shellcode[] = "...";

int main(int argc, char **argv)

{

int (*func)();

func = (int (*)()) shellcode;

(int)(*func)();

}

我的意思是一切,空的()是什么,请解释一下,好像你是在向初学者解释一样。

2 个答案:

答案 0 :(得分:15)

int (*func)();

这是函数指针的声明。函数指针本质上是一个保存函数地址的变量。在这种情况下,func指向的函数类型是不带参数并返回int的函数。您可以将函数的地址分配给此变量,如下所示:

func = foo;

foo是原型int foo();的函数。

将一个函数分配给此变量后,可以调用func指向的函数:

(*func)();

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

func();

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

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

(int (*)())

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

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

(int)(*func)();

可以替换为

(*func)();

答案 1 :(得分:3)

int (*func)();是指向函数的指针的定义,返回类型为intfunc = (int (*)()) shellcode;为函数指针指定一个地址shellcode[](汇编程序字节码,指令)你的CPU执行),(int)(*func)();通过其地址(汇编程序指令)调用函数而没有传递参数,因为指定了()。例如,汇编程序指令\x90具有名称NOP N o Op eration)并且什么都不做,其他汇编程序指令执行不同的操作,具体取决于你正在执行它们的系统。