也就是数组中的数据是四条汇编指令
CLR A
PUSH ACC
PUSH ACC
RETI
的机器码,这样(*((void (*)())(Reset)))()就执行了(一般只对普林斯顿结构的MCU、PC、其他处理器有用—数据空间和程序空间地址统一编码)
CLR A
PUSH ACC
PUSH ACC
RETI
这样的操作。想想可不可做病毒,或者在外部存储器中(外部EEPROM、SD卡、U盘)存储一个文件,该文件就是特定程序的机器码,把这样的存储器插入到设备中时,处理器/单片机读入数据到内部SRAM,之后运行这个读入的程序
int main(void)
{
unsigned char code Reset[]={0xE4,0xC0,0xE0,0xC0,0xE0,0x32}; /* 复位代码,属于机器码 */
(*((void (*)())(Reset)))(); /* 将Reset数组当函数调用 */
}
(原文件名:s.jpg)
也就是数组中的数据是四条汇编指令
CLR A
PUSH ACC
PUSH ACC
RETI
的机器码,这样(*((void (*)())(Reset)))()就执行了(一般只对普林斯顿结构的MCU、PC、其他处理器有用—数据空间和程序空间地址统一编码)
CLR A
PUSH ACC
PUSH ACC
RETI
这样的操作。想想可不可做病毒,或者在外部存储器中(外部EEPROM、SD卡、U盘)存储一个文件,该文件就是特定程序的机器码,把这样的存储器插入到设备中时,处理器/单片机读入数据到内部SRAM,之后运行这个读入的程序
一周热门 更多>