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

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

2013-5-15 22:19
2357
//这是完整代码
#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后面的括弧 和右边那么多的括弧怎么回事啊  求解释

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我也是菜鸟不知道对不对,只说说我的理解。。。。
int (*ret)()  
好像是一个ret 为一个函数指针,ret指向的函数形参为空,返回值为int,
(int(*)())code
这句好像是个强制转换,将code转换成一个形参为空,返回int 的函数指针。。
2013-5-15 23:15
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
过来学习的
2013-5-16 00:07
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
也是新人,不怎么会,大家互相说一下理解。
(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()也提示错误——编译器不能执行这个函数。
休眠
2013-5-16 00:29
0
雪    币: 144
活跃值: (46)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
试试gcc下编译,,,
2013-5-16 10:26
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我对C++、C语言不熟,过来学习学习
2013-5-16 11:40
0
雪    币: 472
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
int (*ret)() = (int(*)())code;
感觉是不是和这个等效呢?
typdef int (*ret)();
ret r = (ret)code;
2013-5-16 11:48
0
游客
登录 | 注册 方可回帖
返回
//