执行硬编码

代码经过编译过变成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,esp
0040357B 51               push ecx
//为局部变量,分配栈空间
0040357C 33C0             xor eax,eax
0040357E 8945FC           mov [ebp-0x04],eax

00403581 8B5508           mov edx,[ebp+0x08] ;取参数1
00403584 03550C           add edx,[ebp+0x0c] ;1+5
00403587 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 ecx
0040358E 5D               pop ebp            ;栈空间
0040358F C3               ret 
以上代码是在C++Builder的CPU调试中得到的。将中间的硬编码复制出来,放入code数组中。执行后,实现同样的功能。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值