C中嵌入机器语言,有几个人会这样写代码!
#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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(17)
另外,这个代码是机器码,跟机器的指令集是相关的,而linux和windows的指令集完全不一样,所以不可能通用的。。
回复
哦,对哦。。真是我错了。。架构是一样的。。只是调用的驱动不一样,系统函数的位置不一样,,,谢谢指出。。。这种架构方面的东西,学习的时候没有联系实际,老是混乱。。
真的不知道你懂还是不懂,X86的机机器码是一样的,linux和windows的都一样,但linux与windows的执行文件驱动不一样,所以不一定能打开。
以前做过的,Shellcode的原理。。用来实现各种攻击,缓冲区溢出等
不要搞那么多冠冕堂皇的东西,什么该死的项目!什么都搞得那么僵硬,就是纯粹为了混口饭吃,乐趣何在!写这个纯粹为了好玩。
搞shellcode的好像经常有人喜欢这么写
可以,hook就是这样干的
这个代码没法通用啊,Linux和Windows汇编指令集不一样,而且32位和64位系统对堆栈的处理也不一样,64位是可以设定数据存储区域“不可执行”的
堆栈中的数据可以当代码执行?
堆栈中的数据可以当代码执行?
因为用16进制看起来B格倍增~
10进制会清晰吗?
回复
用个十六进制就B格倍增了,那么程序员都是ZB犯了。
晕,16禁制的机器码可读性更高啊。。
好吧,那我就不懂了。。
为什么要用16进制来储存呢,用10进制不会更加清晰吗?
堆栈中的数据可以当代码执行?