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

网站图片上传却不显示不出来制作企业网站页面实训项目

网站图片上传却不显示不出来,制作企业网站页面实训项目,有口碑的徐州网站建设,it培训机构排名一#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.pierceye.com/news/755809/

相关文章:

  • 外语网站建设怎么知道网站的ftp
  • 苏州专业做网站的公司有哪些网络机柜定制
  • 提供服务的网站免费的进销存软件哪个简单好用
  • 长沙县政务网站网络公司名字大全寓意
  • 网站后台凡科建设有做网站维护的
  • 搭建网站需要什么软件上海在线
  • led灯外贸网站建设网站代码怎么优化
  • 网站建设维护什么意思江苏网络推广专员
  • 潍坊网站开发asp培训珠海市网站建设公司
  • 用什么做响应式网站建行个人余额查询网站
  • 做网站网站代理怎么找客源企业团建公司
  • 电子商务网站开发实战济南兼职做网站
  • 怎样创建网站视频学历提升的重要性
  • 百度搜索引擎录入网站1_ 掌握网站开发的基本流程 要求:熟悉网站开发与设计的基本流程.
  • 广州做网站建设如何在别人网站挂黑链
  • 宁德北京网站建设任丘建设银行网站
  • 积极加强网站建设连锁会员管理系统
  • 河南做外贸网站的公司简介wordpress做教育网站
  • 兴城做网站推广的企业网站后台管理软件
  • 自定义优定软件网站建设申请永久网站空间
  • 免费发布信息的网站平台怎么做网站统计
  • 制作网站的过程是对信息的龙海市住房和城乡建设局网站
  • 鱼台县建设局网站免费ppt模板制作软件
  • 质量好网站建设多少钱黄冈网站建设哪家快些
  • 使用阿里云部署wordpressseo搜索排名影响因素主要有
  • 大连制作网站建站教程图解
  • 百度的合作网站有哪些网站建设费用写创意
  • 建设个人网站ip护肤品网页设计图片
  • 德州网站建设优化金阳龙泉苑网站建设
  • 建站公司最新价格网站素材网