写了一个玩具程序,学习学习x86指令的机器码,^_^

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

//arrayExec.cpp

//complie with: g++ arrayExec.cpp -o arrayExec.exe

//or cl arrayExec.cpp

#include <stdio.h>

#define SIZE 1024

//等效的代码

//void call(int* n)

//{

// n=990;

//}

typedef void (*F)(int*);

int main()

{

char inst[SIZE];

int op=0;

inst[op++]=0x55;//push %ebp

inst[op++]=0x8b;//mov %esp %ebp

inst[op++]=0xec;

inst[op++]=0x8b;//mov 8(%ebp),%eax

inst[op++]=0x45;

inst[op++]=0x08;

inst[op++]=0xc7;//move $16,(%eax)

inst[op++]=0x00;

inst[op++]=0x10;

inst[op++]=0x00;

inst[op++]=0x00;

inst[op++]=0x00;

inst[op++]=0x5d;//pop %ebp

inst[op++]=0xc3;//ret

int n=9;

//vc7.1的编译器,好像对F function = (F)array;不认帐

F funcion = (F)(void*)inst;

funcion(&n); //结果等价于call(&n)

printf("%i\n",n);

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航