C中嵌入机器语言,有几个人会这样写代码!

发布于 2021-11-17 01:00:47 字数 368 浏览 982 评论 17

#include <stdio.h>

typedef int (*fp_add_t)(int a, int b);

int main(void)
{
unsigned char buf[] = {
0x55, 
0x89, 0xe5,
0x8b, 0x45, 0x0c,
0x8b, 0x55, 0x08,
0x8d, 0x04, 0x02,
0x5d,
0xc3,
};
fp_add_t add = (fp_add_t) buf;
printf("%d+%d=%dn", 2, 3, add(2, 3));
return 0;

}

winxp下测试通过,linux下测试出错

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(17

私藏温柔 2021-11-19 10:30:45

另外,这个代码是机器码,跟机器的指令集是相关的,而linux和windows的指令集完全不一样,所以不可能通用的。。

樱花落人离去 2021-11-19 10:30:45

回复
哦,对哦。。真是我错了。。架构是一样的。。只是调用的驱动不一样,系统函数的位置不一样,,,谢谢指出。。。这种架构方面的东西,学习的时候没有联系实际,老是混乱。。

别再吹冷风 2021-11-19 10:30:45

真的不知道你懂还是不懂,X86的机机器码是一样的,linux和windows的都一样,但linux与windows的执行文件驱动不一样,所以不一定能打开。

好听的两个字的网名 2021-11-19 10:30:41

以前做过的,Shellcode的原理。。用来实现各种攻击,缓冲区溢出等

陌上芳菲 2021-11-19 10:30:11

不要搞那么多冠冕堂皇的东西,什么该死的项目!什么都搞得那么僵硬,就是纯粹为了混口饭吃,乐趣何在!写这个纯粹为了好玩。

猫性小仙女 2021-11-19 10:30:05

搞shellcode的好像经常有人喜欢这么写

恋你朝朝暮暮 2021-11-19 10:23:01

可以,hook就是这样干的

裸钻 2021-11-19 10:20:44

这个代码没法通用啊,Linux和Windows汇编指令集不一样,而且32位和64位系统对堆栈的处理也不一样,64位是可以设定数据存储区域“不可执行”的

韬韬不绝 2021-11-19 10:06:14

堆栈中的数据可以当代码执行?

只为守护你 2021-11-19 10:01:31

堆栈中的数据可以当代码执行?

爱你是孤单的心事 2021-11-19 09:52:58

因为用16进制看起来B格倍增~

2021-11-19 09:33:53

10进制会清晰吗?

执手闯天涯 2021-11-19 09:18:04

回复
用个十六进制就B格倍增了,那么程序员都是ZB犯了。

猫烠⑼条掵仅有一顆心 2021-11-19 09:06:23

晕,16禁制的机器码可读性更高啊。。

能否归途做我良人 2021-11-19 07:27:17

好吧,那我就不懂了。。

一人独醉 2021-11-19 06:21:34

为什么要用16进制来储存呢,用10进制不会更加清晰吗?

怎言笑 2021-11-19 03:21:42

堆栈中的数据可以当代码执行?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文