日期:2014-05-16  浏览次数:20608 次

set_gate这里为什么要强制转换?
#define _set_gate(gate_addr,type,dpl,addr) \  
__asm__ ("movw %%dx,%%ax\n\t" \
"movw %0,%%dx\n\t" \
"movl %%eax,%1\n\t" \
"movl %%edx,%2" \
: \
: "i" ((short) (0x8000+(dpl<<13)+(type<<8))), \
"o" (*( (char *) (gate_addr))), \
"o" (*(4+ (char *) (gate_addr))), \
"d" ((char *) (addr)),"a" (0x00080000))

为什么要转换成char指针?还有为什么是char而不是其他的?

------解决方案--------------------
你这个是什么版本的内核啊 其他版本也有用long *的 ,用什么类型的指针不重要
但是对于char * 指针,+1 只是增加一个字节,所以这里要+4凑齐32位的偏移
32位机上的long * ,+1 增加4个字节的偏移