当前位置: 首页 > news >正文

上虞网站建设哪家好网站建设策划书3000字

上虞网站建设哪家好,网站建设策划书3000字,做ui的网站有哪些,建手机网站公司一#xff1a;背景 1. 一个很好奇的问题我们在学习 C# 的过程中#xff0c;总会听到一个词叫做 内核态 #xff0c;比如说用 C# 读写文件#xff0c;会涉及到代码从 用户态 到 内核态 的切换#xff0c;用 HttpClient 获取远端的数据#xff0c;也会涉及到 用户态 到 内核… 一背景 1. 一个很好奇的问题我们在学习 C# 的过程中总会听到一个词叫做 内核态 比如说用 C# 读写文件会涉及到代码从 用户态 到 内核态 的切换用 HttpClient 获取远端的数据也会涉及到 用户态 到 内核态 的切换那到底这是个什么样的交互流程毕竟我们的程序是无法操控 内核态 今天我们就一起探索下。二探究两态的交互流程 1. 两个态的交界在哪里我们知道人间和地府的交界处在 鬼门关同样的道理 用户态 和 内核态 的交界处在 ntdll.dll 层画个图就像下面这样操作系统为了保护 内核态 的代码在用户态直接用指针肯定是不行的毕竟一个在 ring 3一个在 ring 0而且 cpu 还做了硬件保护兜底那怎么进入呢为了方便研究先上一个小例子。2. 一个简单的文件读取我们使用 File.ReadAllLines() 实现文件读取代码如下internal class Program{public static object lockMe  new object();static void Main(string[] args){var txt File.ReadAllLines(D:\1.txt);Console.WriteLine(txt);Console.ReadLine();}}在 Windows 平台上所有内核功能对外的入口就是 Win32 Api 言外之意这个文件读取也需要使用它可以在 WinDbg 中使用 bp ntdll!NtReadFile 在 鬼门关 处进行拦截。0:000 bp ntdll!NtReadFile breakpoint 0 redefined 0:000 g ModLoad: 00007ffefdb20000 00007ffefdb50000   C:\Windows\System32\IMM32.DLL ModLoad: 00007ffee2660000 00007ffee26bf000   C:\Program Files\dotnet\host\fxr\6.0.5\hostfxr.dll Breakpoint 0 hit ntdll!NtReadFile: 00007ffefe24c060 4c8bd1          mov     r10,rcx哈哈很顺利的拦截到了接下来用 uf ntdll!NtReadFile 把这个方法体的汇编代码给显示出来。0:000 uf ntdll!NtReadFile ntdll!NtReadFile: 00007ffefe24c060  mov     r10,rcx 00007ffefe24c063  mov     eax,6 00007ffefe24c068  test    byte ptr [SharedUserData0x308 (000000007ffe0308)],1 00007ffefe24c070  jne     ntdll!NtReadFile0x15 (00007ffefe24c075)  00007ffefe24c072  syscall 00007ffefe24c074  ret 00007ffefe24c075  int     2Eh 00007ffefe24c077  ret从汇编代码看逻辑非常简单就是一个 if 判断决定到底是走 syscall 还是  int 2Eh很显然不管走哪条路都可以进入到 内核态接下来逐一聊一下。3. int 2Eh 入关走法相信在调试界没有人不知道 int 是干嘛的毕竟也看过无数次的 int 3本质上来说在内核层维护着一张 中断向量表,每一个数字都映射着一段函数代码当你打开电脑电源而后被 windows 接管同样借助了 中断向量表 好了接下来简单看看如何寻找 3 对应的函数代码。windbg 中有一个 !idt 命令就是用来寻找数字对应的函数代码。lkd !idt 3Dumping IDT: fffff804347e100003: fffff80438000f00 nt!KiBreakpointTrap可以看到它对应的内核层面的 nt!KiBreakpointTrap 函数同样的道理我们看下 2E。lkd !idt 2EDumping IDT: fffff804347e10002e: fffff804380065c0 nt!KiSystemService现在终于搞清楚了进入内核态的第一个方法就是 KiSystemService从名字看它是一个类似的通用方法接下来就是怎么进去到内核态相关的 读取文件 方法中呢要想找到这个答案可以回头看下刚才的汇编代码 mov eax,6 这里的 6 就是内核态需要路由到的方法编号哈哈那它对应着哪一个方法呢由于 windows 的闭源我们无法知道幸好在 github 上有人列了一个清单https://j00ru.vexillium.org/syscalls/nt/64/  对应着我的机器上就是。从图中可以看到其实就是  nt!NtReadFile 到这里我想应该真相大白了接下来我们聊下 syscall。4. syscall 的走法syscall 是 CPU 特别提供的一个功能叫做 系统快速调用言外之意它借助了一组 MSR寄存器 帮助代码快速从 用户态 切到 内核态, 效率远比走 中断路由表 要快得多这也就是为什么代码会有 if 判断其实就是判断 cpu 是否支持这个功能。刚才说到它借助了 MSR寄存器其中一个寄存器 MSR_LSTAR 存放的是内核态入口函数地址我们可以用 rdmsr c0000082 来看一下。lkd rdmsr c0000082 msr[c0000082]  fffff80438006cc0lkd uf fffff80438006cc0 nt!KiSystemCall64: fffff80438006cc0 0f01f8          swapgs fffff80438006cc3 654889242510000000 mov   qword ptr gs:[10h],rsp fffff80438006ccc 65488b2425a8010000 mov   rsp,qword ptr gs:[1A8h] ...从代码中可以看到它进入的是 nt!KiSystemCall64 函数然后再执行后续的 6 对应的 nt!NtReadFile 完成业务逻辑最终也由 nt!KiSystemCall64 完成 内核态 到 用户态 的切换。知道了这两种方式接下来可以把图稍微修补一下增加 syscall 和 int xxx 两种入关途径。三总结通过汇编代码分析我们终于知道了 用户态 到 内核态 的切换原理原来有两种途径一个是 int 2e一个是 syscall 加深了我们对 C# 读取文件 的更深层理解。
http://www.zqtcl.cn/news/762603/

相关文章:

  • 成都哪家公司做网站最好杭州软件开发
  • 做网站多少宽带够wordpress编辑文章中图片
  • 无锡网站制作排名软件工程公司
  • 做网站国内好的服务器美食网站建设项目规划书
  • 三亚市住房和城乡建设厅网站江西电信网站备案
  • 联谊会总结网站建设对外宣传如何在家做电商
  • 360建站系统徐州建设银行网上银行个人网站
  • 网站域名在哪里备案石家庄站规模
  • 重庆南川网站制作公司电话工会网站群建设
  • 深圳高端建设网站忘了网站链接怎么做
  • 郑州做网站报价wordpress中文4.8
  • 网站维护费用一年多少跨境电商平台网站建设广州
  • 辽宁网站制作公司网店装修流程
  • html5可以做交互网站吗打开网站说建设中是什么问题?
  • 彩票网站开发制作需要什么wordpress 在线预览
  • 外贸平台app衡水seo排名
  • 怎样做网站表白墙东莞商城网站推广建设
  • 郑州郑州网站建设河南做网站公司哪家好爱站长尾词挖掘工具
  • dede网站地图文章变量网站qq 微信分享怎么做
  • 越南做网站网站建设以及运营方面
  • 广西建网站哪家好网站关闭与域名备案
  • 网站开发版本号婚庆网站建设策划案费用预算
  • 厦门建设网站制作中山市哪家公司做网站
  • 网站路径wordpress制作电商网站
  • 江西网站开发哪家专业装饰设计公司网站
  • 企业网站策划实训Wordpress 主题简化
  • 做网站点击挣钱不兰州工程建设信息网站
  • 网站说服力 营销...免费看片网站
  • 深圳招聘网站大全制作网站软件下载
  • 网站建设说明哈尔滨网站建设渠道