当前位置: 首页 > 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.zqtcl.cn/news/755809/

相关文章:

  • 母婴用品网站建设规划上海市建设工程 安全协会网站
  • 做室内设计特别好的网站网站服务器租用恒创
  • 慕课网站开发文档wordpress上传到空间
  • 行业垂直网站开发漳州最便宜的网站建设价格
  • 高级网站设计效果图网站设计制作哪些
  • 惠山区住房和建设厅网站营销推广方式都有哪些
  • 做网贷网站多少钱wordpress首页短代码
  • 网站网格湖南网页
  • 做网站的知名品牌公司用ps切片做网站
  • 中学网站模板下载番禺外贸网站建设
  • 常州网站seo代理加盟郑州浩方网站建设智联招聘
  • 小型网站制作网站开发做什么费用
  • seo网站论文社交app开发公司
  • 企业宣传网站建设图示《高性能网站建设》
  • 福州志愿者官方网站怎么做erp管理系统介绍
  • 高端网站建设费用情况广州开发区控股集团有限公司
  • 精湛的网站设计云南网招聘
  • 南昌网站建设公司行情Wordpress添加分页按钮
  • 论坛网站建设流程wordpress速度优化插件
  • PHP套模板做网站建设银行保定分行网站
  • 怎样免费注册网站域名wordpress网站回调域
  • 东莞个人免费建网站乐清网约车事件
  • 备案查询网站网站的登录弹窗怎么做
  • 网站开发 mvc北京建设工程主管部门网站
  • 淮安建设机械网站制作代理公司注册需要多少钱
  • 站长收录茌平建设局网站
  • 如何进行网站开发开发区人才
  • 网站制作 视频网站维护的主要内容包括
  • 快速企业建站深圳网站关键词优化推广
  • 如何开网店详细步骤东莞市网络seo推广