programming
330 days ago
将机器码嵌入C语言
C 专家编程中提到一个小故事
季军作品所花的时间比预想的时间还要稍少一些。该程序的构思最为周详,程序员殚精竭虑,用优化机器代码来解决问题,并把指令作为整型数组存储在程序中,由于在程序中覆盖堆栈上的返回地址是非常容易的(正如Bob Morris,Jr. 1988年在Internet蠕虫中所做的那样),所以程序可以跳转到这个整型数组并逐条执行这些指令。所记录的时间如实反映了这些指令解决问题的时间。
我们来看一个这样的程序:
typedef int(*MAX)(int ,int);
int main (int argc, char const *argv[])
{
char fun[]={0x55,0x89,0xe5,0x8b,0x45,0x08,0x39,0x45,0x0c,0x0f,0x4d,0x45,0x0c,0x5d,0xc3};
int a=5;
int b=4;
int c;
MAX max=fun;
c=max(a,b);
printf("c=%d\n",c);
return 0;
}
上述代码中的fun是如下函数的机器码实现
int max(int a,int b)
{
return (a>b)?a:b;
}
上述代码在x86, gcc4.3上编译运行通过
Commenting is closed for this article.
<< Office Open XML File Formats :ISO/IEC 29500 下载 Google Mobile App for Blackberry 8700 8820 >>