没有语法错误,也编译不过去。如何执行一行用户输入的机器码?

atlight 2011-04-25 08:01:44
突发奇想。想到将代码加密后再执行。要是在汇编可以直接jmp过去。
在C里面怎么搞呢?用函数指针好像也不行。好不容易强类型转换了。没有语法错误。
但就是编译不过去。

error C2440: “类型转换”: 无法从“char [255]”转换为“void (__cdecl *)(void)”
1> 没有使该转换得以执行的上下文





int main(int argc, char* argv[])
{
char code[255];
memset(code,0xcc,sizeof(code));
scanf("%s",code);
printf("%s",code);
void (*fun)(void); //定义一个函数指针
fun = (void(__cdecl*)(void)) code;
fun(); //执行用户输入的机器码
return 0;
}


...全文
69 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
atlight 2011-04-25
  • 打赏
  • 举报
回复
才知道。原来 X64不支持内联汇编 难怪刚才我不行。
谢谢了
bluesky12312388 2011-04-25
  • 打赏
  • 举报
回复

__asm
{
lea esi,code
jmp esi
}
atlight 2011-04-25
  • 打赏
  • 举报
回复
楼上给的也是编译失败郁闷。

1>Win32ConsoleTest.cpp(16): error C2440: “类型转换”: 无法从“char [255]”转换为“pFun”
1> 没有使该转换得以执行的上下文
1>
1>生成失败。
淡蓝 2011-04-25
  • 打赏
  • 举报
回复
char code[255];
memset(code,0xcc,sizeof(code));
scanf("%s",code);
printf("%s",code);
typedef void (*Fun)(void); //定义一个函数指针
Fun fun = (Fun)(void*)code;
fun(); //执行用户输入的机器码
return 0;

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧