c - 测试 shellcode

标签 c 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 是一个原型(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/

相关文章:

c - 从同一目录杀死进程

arrays - 在 for 循环中找到了 2 个带有 ',' 运算符的线性 C 解决方案,有人可以解释给定的逗号运算符语句吗?

c - "peek"入eventfd内部计数器值不变

c - 解释 shellcode

c - execle() 还指定了环境。这意味着什么?

c - 缓冲区溢出-设置要打印的相关文本

c - 这种将 char 数组转换为函数的调用有何作用?

c - 这个 C 矩阵代码有什么作用?

c - C 中的字符串连接函数不执行任何操作,那么正确的方法是什么?

linux - shellcode错误段错误(核心转储)