首页
社区
课程
招聘
[旧帖] [讨论]大家看看这段代码 这句我看不懂 求解释 0.00雪花
2013-5-15 22:19 2212

[旧帖] [讨论]大家看看这段代码 这句我看不懂 求解释 0.00雪花

2013-5-15 22:19
2212
//这是完整代码
#include<stdio.h>
#include<string.h>

unsigned char code[] = \
"\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80";

main()
{

printf("Shellcode Length: %d\n", strlen(code));

int (*ret)() = (int(*)())code;

ret();

}
//就是这句
int (*ret)() = (int(*)())code;
求解释  ret后面的括弧 和右边那么多的括弧怎么回事啊  求解释

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
打赏
分享
最新回复 (6)
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
亚辰 2013-5-15 23:15
2
0
我也是菜鸟不知道对不对,只说说我的理解。。。。
int (*ret)()  
好像是一个ret 为一个函数指针,ret指向的函数形参为空,返回值为int,
(int(*)())code
这句好像是个强制转换,将code转换成一个形参为空,返回int 的函数指针。。
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
离丶恨 2013-5-16 00:07
3
0
过来学习的
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jxyyjm 2013-5-16 00:29
4
0
也是新人,不怎么会,大家互相说一下理解。
(int(*)())code——是将code强制转换,转换成int类型的指针,参数为空。

但是int (*ret)() = (int(*)())code;此句提示错误error C2440: 'type cast' : cannot convert from 'unsigned char [26]' to 'int (__cdecl *)(void)'
觉得int (*ret) = (int(*))code;是对的。

另外printf("Shellcode Length: %d\n", strlen(code));
会提示错误,需要将code强制转换(const char *)code。

最后还有ret()也提示错误——编译器不能执行这个函数。
休眠
雪    币: 144
活跃值: (46)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
gotmilk 2 2013-5-16 10:26
5
0
试试gcc下编译,,,
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
penziyan 2013-5-16 11:40
6
0
我对C++、C语言不熟,过来学习学习
雪    币: 472
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
onlycrazy 2013-5-16 11:48
7
0
int (*ret)() = (int(*)())code;
感觉是不是和这个等效呢?
typdef int (*ret)();
ret r = (ret)code;
游客
登录 | 注册 方可回帖
返回