如何在函数开始部分自动插入保存现场代码 好多编译器都有 __irq 关键字,好像VC没有,请问如何利用VC实现,函数开始的时候 寄存器统统入栈,结束的时候都出来呀? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 PUSHAD指令压入32位寄存器,使他们按照EDI,ESI,EBP,ESP,EBX,EDX,ECX,最后是EAX的顺序出现在堆栈中。 #define SAFE_CALL(x) \_asm {pushad}; \x; \_asm {popad};调用时这样操作:比如有函数funcvoid func(int a,char* b){...}SAFE_CALL((func(10,NULL));就行了 我终于想明白了,靠中断并不安全。只有靠消息队列。中断发生时,即便是做到保护现场。也存在中断嵌套问题。系统变得不稳定。如果不允许嵌套,很有可能丢消息。而且如果保护现场不是原子的。这个时候中断,将是灾难性的。还有浮点寄存器要保护......... 总之,还是消息队列安全稳定。可能就是因为这个vc并没有__irq 关键字。 VC++高手救我 一个网页,里头一个按钮,如何获取点击按钮后发送出来的url? 关于验证码技术 求 谁知道程序员考试什么时候报名呀? 一个小问题 怎样弹出一个对话框让人选择硬盘上的一个目录(不是文件)? 程序中的.ncb和.opt文件干什么用的? 不知哪里还能找得到DOS命令的C代码源程序? WaitForSingleObject等待事件对象的问题 求助:sendinput函数无效 怎样在MFC中不依靠rc文件只用代码创建对话框窗口?
_asm {pushad}; \
x; \
_asm {popad};
调用时这样操作:
比如有函数func
void func(int a,char* b)
{
...
}SAFE_CALL((func(10,NULL));就行了
中断发生时,即便是做到保护现场。也存在中断嵌套问题。系统变得不稳定。如果不允许嵌套,很有可能丢消息。而且如果保护现场不是原子的。这个时候中断,将是灾难性的。还有浮点寄存器要保护......... 总之,还是消息队列安全稳定。可能就是因为这个vc并没有__irq 关键字。