使用了特殊的指令syscall(加载msr到rip),该指令将cpu ring从3变为0,并执行保存在MST_LSTAR的syscall函数的地址。
entry_SYSCALL_64_after_hwframe(汇编)
查找到系统调用号与函数的对应表
do_syscall_64 ->syscall_table nr 完成系统调用
完成后,调用prepare_exit_to_usermode和
USERREG_SYSRET64 swapgs sysretq 返回用户态
相比于32位时int 80中断的模式,效率上应该会好很多。
64位相对于32位系统,多使用了一个特殊模块寄存器,不使用中断,效率上应该高很多。
这个是不好搞的。32位的dll,64位的是读不起来的。我以前在网上下载过一个能分4个桌面的Msvell.dll,这个是只兼容32位的,一般你可以看一下,用任务管理器打开用"revers32/64 (软件的位置)://(文件的名称).(扩展名) begin!logo来试一下。如果兼容那就用如果不兼容,那就是位数不一样。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)