在有人建议使用cdecl工具之前,我已经尝试过了。奇怪的是,大多数查询的语句都返回语法错误警告。
以下是我在网上找到的一个C程序,它只运行一段shellcode。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv) {
char shellcode[] = "\xb0\x01\x31\xdb\xcd\x80";
int (*func)();
func = (int (*)()) shellcode;
(int)(*func)();
return 0;
}
程序按预期工作,但C语法是我见过的最奇怪的。我会尽力解释它们。
int (*func)();
这个语句声明了func作为一个指向函数的指针(由'*'表示),该函数返回一个整数(由'()'表示)。
func = (int (*)()) shellcode;
这个语句将shellcode数组强制转换为指向返回int类型的函数(由“()”表示)的指针(由“(*)”表示),并将该指针分配给func。
(int)(*func)();
最终语句执行指针func所指向的函数(用'()'表示)并将结果强制转换为整数类型。
我认为这就是在这里发生的事情。如果有更有经验的C语言程序员看到我的解释中有任何错误,或者能提供其他或更具教育性的解释,我非常欢迎你的意见。
我从未像这样编写过变量初始化或函数调用,因此对展示的语法仍然感到相当困惑。如果您有更易读的方法来编写上面的代码,请也提供意见。
谢谢。