@会网络的老鼠

涂飞平的博客空间

补充宏move_to_user_mode定义

12 年前 0

为了上文的方便,这里列出了Linux中宏move_to_user_mode的定义:

#define move_to_user_mode()
__asm__ (
"movl %%esp,%%eaxnt" // save stack pointer
"pushl $0x17nt"
"pushl %%eaxnt"
/*至此,压进了任务0的数据段选择符和内核堆栈指针bsp*/
"pushflnt"
/*pushfl会把所有标志寄存器压近堆栈里面 */
"pushl $0x0fnt"
/*代码段选择符*/
"pushl $1fnt"
/*压入下一命令偏移*/
"iretn"
/*调用中断返回指令实现跳转*/
/*恢复*/
"1:t movl $0x17,%%eaxnt"
"movw %%ax,%%dsnt"
"movw %%ax,%%esnt"
"movw %%ax,%%fsnt"
"movw %%ax,%%gs"
:::"ax" )
注意:这里采用的是AT&T x86汇编语法,与一般我们常见的Intel x86汇编语法不一样,但还是可以看懂的 b-8bit,w-16bit,l-32bit

编写评论