linux-011之segment.h头文件

xiaoxiao2021-02-28  42

/*读取fs段中指定地址处的字节 *参数:addr-指定的内存地址 *%0-(_v),%1-内存地址 *返回:返回内存fs:[addr]处的字节 */ extern inline unsigned char get_fs_byte(const char*addr) { unsigned register char _v; __asm__("movb %%fs:%1,%0":"=r"(_v):"m"(*addr)); return _v; } /*读取fs段中指定地址处的字 *参数:addr-指定的内存地址 *%0-(_v),%1-内存地址 *返回:返回内存fs:[addr]处的字 */ extern inline unsigned short get_fs_word(const unsigned short *addr) { unsigned short _v; __asm__("movw %%fs:%1,%0":"=r")(_v):"m"(*addr); return _v; } /*读取fs段中指定地址处的长字 *参数:addr-指定的内存地址 *%0-(_v),%1-内存地址 *返回:返回内存fs:[addr]处的长字 */ extern inline unsigned long get_fs_long(const unsigned long *addr) { unsigned long _v; __asm__("movl %%fs:%1,%0":"=r"(_v):"m"(*addr)); return _v; } /*将一字节放在fs段中指定内存地址处 *参数:val-长字值,addr-内存地址 *%0-寄存器(val),%1-内存地址(addr) */ extern inline void put_fs_byte(char val,char *addr) { __asm__("movb %0,%%fs:%1"::"r"(val),"m"(*addr)); } /*将一字放在fs段中指定内存地址处 *参数:val-长字值,addr-内存地址 *%0-寄存器(val),%1-内存地址(addr) */ extern inline void put_fs_word(short val,short *addr) { __asm__("movw %0,%%fs:%1"::"r"(val),"m"(*addr)); } /*将一长字放在fs段中指定内存地址处 *参数:val-长字值,addr-内存地址 *%0-寄存器(val),%1-内存地址(addr) */ extern inline void put_fs_long(unsigned long val,unsigned long*addr) { __asm__("movl %0,%%fs:%1"::"r"(val),"m"(*addr)); } //取fs段寄存器值 //返回,fs寄存器值 extern inline unsigned long get_fs() { unsigned short _v; __asm__("mov %%fs,%%al":"=a"(_v):); return _v; } //取ds段寄存器值 //返回,ds寄存器值 extern inline unsigned long get_ds() { unsigned short _v; __asm__("mov %%ds,%%al":"=a"(_v):); return _v; } //设置fs段寄存器 //参数:val-段值 extern inline void set_fs(unsigned long val) { __asm__("mov %0.%%fs"::"a"((unsigned long)(val))); }
转载请注明原文地址: https://www.6miu.com/read-81487.html

最新回复(0)