今天逛blog发现的一段比较有趣的代码,可能比较老的了,分享一下吧~~~hoho~~ 有兴趣的朋友看看~~拍拍砖~~
代码如下,实现的功能是软复位,提示,copy过去keil,编译后运行,然后用反汇编窗口看一下生成的代码是啥,想想就知道的了,哈~~~ 我觉得这个程序段很好,很好的诠释了一些基本的概念,但是不是很被人在意的概念。 数组名的本质,函数名的本质,指针的本质,执行子程序的时候PC和堆栈究竟做了些什么工作,函数指针怎么用,怎么用实际的内存地址来做指针变量。数组里面的数据的本质是什么?跟代码有啥不同?(将数组里面的数据当代码用 ....... ) 另外,这里用到的一些基本技巧是 DOS 病毒上面也会用的~~~所以原blog称他为病毒了 ,囧
main()
{
unsigned char code rst[]={0xe4,0xc0,0xe0,0xc0,0xe0,0x32}; // 复位代码
(*((void (*)())(rst)))(); // 执行上一行代码,将rst数组当函数调用
}
想了半天想不出来,或者想出来想对对答案的: http://www.roboticfan.com/blog/user_2005/11202/archives/2007/2007612224342.shtml (这不是我的blog,只是偶尔逛过看到而已, 所以没有广告成分....) |