执行硬编码
来源:互联网 发布:巫妖王之怒数据库 编辑:程序博客网 时间:2024/04/30 06:08
代码经过编译过变成2进制数,也就是硬编码。怎样让硬编码,在人为指定的地方执行呢?也是将这个二进制数,放到一个数组里,让程序将这个数组当代码执行。
int add(int a,int b)//C语言函数{ int c=0; c = a+b; return c;}typedef int (*p)(int a,int b);//定义函数指针byte code[]={0x55,0x8B,0xEC,0x51,0x33,0xc0,0x89,0x45,0xfc,0x8b,0x55,0x08, 0x03,0x55,0x0c,0x89,0x55,0xfc,0x8b,0x45,0xfc,0x59,0x5d,0xc3};//二进制编码void __fastcall TForm1::Button13Click(TObject *Sender){ //add(1,3);//屏蔽,不执行 p j; j = (p)&code; int c = j(1,5);//执行数组中的硬编码}add函数的反汇编代码如下:
Unit1.cpp.244: int add(int a,int b)00403578 55 push ebp ;准备栈空间00403579 8BEC mov ebp,esp0040357B 51 push ecx//为局部变量,分配栈空间0040357C 33C0 xor eax,eax0040357E 8945FC mov [ebp-0x04],eax00403581 8B5508 mov edx,[ebp+0x08] ;取参数100403584 03550C add edx,[ebp+0x0c] ;1+500403587 8955FC mov [ebp-0x04],edx ;结果存入局部变量c的空间Unit1.cpp.248: return c;0040358A 8B45FC mov eax,[ebp-0x04] ;将c的值放入EAX作为函数返回值Unit1.cpp.249: }0040358D 59 pop ecx0040358E 5D pop ebp ;栈空间0040358F C3 ret以上代码是在C++Builder的CPU调试中得到的。将中间的硬编码复制出来,放入code数组中。执行后,实现同样的功能。
0 0
- 执行硬编码
- 硬编码
- 硬编码
- 硬编码
- 硬编码
- 硬编码
- 硬编码
- 硬编码
- 硬编码与硬编码
- 谈谈硬编码
- 硬编码科普1
- 什么是硬编码 hardcode
- 硬编码实例
- H264--Intel硬编码
- hardcode 什么是硬编码
- java硬编码
- VPU硬编码
- GPU硬编码---NVCUVENC
- java.lang.NumberFormatException: For input string: "undefined"
- segment视图切换
- xml的用途
- union, struct, enum 的 大小区别
- hibernate和spring和struts2工作原理
- 执行硬编码
- java是如何实现跨平台的
- HDU1175 DFS 转弯问题思路
- C#、VC++与QT对比之QT的高效与跨平台
- 如何成为优秀的驱动开发工程师
- Android NDK开发之JNI调用Java对象
- slam收藏(updating)
- 第二十节 协议栈Flash数据存储
- 数据结构 — 二叉树(创建、遍历)java实现