SYSENTER和SYSEXIT

本文详细介绍了SysEnter和SysExit指令的工作原理及其在不同权限级别间切换时如何确定目标指令和栈指针的过程。SysEnter指令通过特定的模型特定寄存器(MSRs)来设置ring0级的操作环境,而SysExit则通过寄存器和修改过的MSRs值来恢复ring3级的状态。

SysEnter和SysExit指令是结伴的,但是不是成对的。因为SYSENTER并不会保存任何供SYSEXIT在返回时使用的状态信息。这些指令的目标指令和栈指针不是通过指令操作数在确定的,而是通过几个MSRs(Model-Specific Registers)和几个通用寄存器确定的。

SYSENTER通过以下来源获取ring0的目标指令和栈指针:

l  目标代码段(CS)——从SYSENTER_CS_MSR中读取

l  目标指令(EIP)——从SYSENTER_EIP_MSR中读取

l  栈段(SS)——从SYSENTER_CS_MSR中读取

l  栈指针(ESP)——从SYSENTER_ESP_MSR中读取

 

 

SYSEXIT 通过以下指令获取ring3的目标指令和栈指针

l  目标代码段(CS)——从SYSENTER_CS_MSR中的值加上16(0x10)

l  目标指令(EIP)——从EDX中读取

l  栈段(SS)——从SYSENTER_CS_MSR中的值加上24(0x18)

l  栈指针(ESP)——从ECX中读取

 

yangyang@amd24:~/app/byte-unixbench/UnixBench$ ./Run -c 1 dhry2reg make all make[1]: 进入目录“/home/yangyang/app/byte-unixbench/UnixBench” make distr make[2]: 进入目录“/home/yangyang/app/byte-unixbench/UnixBench” Checking distribution of files ./pgms exists ./src exists ./testdir exists ./tmp exists ./results exists make[2]: 离开目录“/home/yangyang/app/byte-unixbench/UnixBench” make programs make[2]: 进入目录“/home/yangyang/app/byte-unixbench/UnixBench” make[2]: 对“programs”无需做任何事。 make[2]: 离开目录“/home/yangyang/app/byte-unixbench/UnixBench” make[1]: 离开目录“/home/yangyang/app/byte-unixbench/UnixBench” sh: 1: 3dinfo: not found # # # # # # # ##### ###### # # #### # # # # ## # # # # # # # ## # # # # # # # # # # # ## ##### ##### # # # # ###### # # # # # # ## # # # # # # # # # # # # ## # # # # # # # ## # # # # #### # # # # # ##### ###### # # #### # # Version 6.0.0 Based on the Byte Magazine Unix Benchmark Multi-CPU version Version 5 revisions by Ian Smith, Sunnyvale, CA, USA May 21, 2025 johantheghost at yahoo period com ------------------------------------------------------------------------------ Use directories for: * File I/O tests (named fs***) = /home/yangyang/app/byte-unixbench/UnixBench/tmp * Results = /home/yangyang/app/byte-unixbench/UnixBench/results ------------------------------------------------------------------------------ Wide character in print at ./Run line 1811. Wide character in printf at ./Run line 1842. 1 x Dhrystone 2 using register variables 1 2 3 4 5 6 7 8 9 10 Use of uninitialized value in division (/) at ./Run line 1281. Wide character in printf at ./Run line 1742. ======================================================================== BYTE UNIX Benchmarks (Version 6.0.0) System: amd24: GNU/Linux OS: GNU/Linux -- 6.8.0-78-generic -- #78~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Aug 13 14:32:06 UTC 2 Machine: x86_64 (x86_64) Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8") CPU 0: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 1: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 2: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 3: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 4: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 5: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 6: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 7: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 8: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 9: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 10: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 11: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 12: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 13: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 14: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 15: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 16: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 17: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 18: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 19: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 20: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 21: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 22: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 23: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 24: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 25: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 26: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 27: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 28: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 29: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 30: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET CPU 31: AMD Ryzen 9 7950X 16-Core Processor (8982.2 bogomips) Hyper-Threading, x86-64, MMX, AMD MMX, Physical Address Ext, SYSENTER/SYSEXIT, AMD virtualization, SYSCALL/SYSRET 11:05:00 up 14 days, 19:30, 1 user, load average: 0.00, 0.04, 0.08; runlevel 2025-09-02 ------------------------------------------------------------------------ Benchmark Run: 三 9月 17 2025 11:05:00 - 11:07:10 32 CPUs in system; running 1 parallel copy of tests Dhrystone 2 using register variables 0.1 lps (10.0 s, 7 samples) System Benchmarks Partial Index BASELINE RESULT INDEX Dhrystone 2 using register variables 116700.0 0.1 0.0 ======== System Benchmarks Index Score (Partial Only) 10.0
最新发布
09-18
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值