首页 > 其他分享 >11月9日总结

11月9日总结

时间:2023-11-14 12:56:19浏览次数:25  
标签:11 总结 查看 汇编 代码 命令 Net 调试

今天是《Net 高级调试》的第八篇文章。这篇文章设计的内容挺多的,比如:如何查看方法的汇编代码,如何获取方法的描述符,对象同步块的转储,对象方法表的转储,托管堆和垃圾回收器信息的转储,CLR 的版本,GC 模式,等等,内容挺多的。内容虽然挺多,但是这些都是高级调试的基础。虽然这些都是基础,如果这些掌握不好,以后的高级调试的道路,也不好走。当然了,第一次看视频或者看书,是很迷糊的,不知道如何操作,还是那句老话,一遍不行,那就再来一遍,还不行,那就再来一遍,俗话说的好,书读千遍,其意自现。
     如果在没有说明的情况下,所有代码的测试环境都是 Net Framewok 4.8,但是,有时候为了查看源码,可能需要使用 Net Core 的项目,我会在项目章节里进行说明。好了,废话不多说,开始我们今天的调试工作。

     调试环境我需要进行说明,以防大家不清楚,具体情况我已经罗列出来。
          操作系统:Windows Professional 10
          调试工具:Windbg Preview(可以去Microsoft Store 去下载)
          开发工具:Visual Studio 2022
          Net 版本:Net Framework 4.8
          CoreCLR源码:源码下载

二、基础知识
    1、代码审查
        1.1、简介
            代码审查就是观察代码,代码由三种心态:机器代码、IL代码、C#代码。高级调试属于逆向分析,更多的是以 汇编代码 为主,如果对汇编无感,想学好 Net 高级调试,也是比较困难的。

        1.2、观察汇编代码
            1)u命令
                这个命令用来将非托管函数的机器代码转成汇编代码,当然,我们想要查看汇编代码,不一定非要使用 Windbg,我们也可以使用 Visual Studio IDE 的反汇编窗口。我们可以通过点击菜单【调试】--》【窗口】----》【反汇编】,打开反汇编窗口。
                

            2)!u命令
                这个命令是由 SOS 提供的,专门用于观察 托管函数 的汇编表示,接下来,我们查看一下 Main 方法的汇编代码。

        1.3、观察 IL 代码
            SOS 提供了一个叫 !dumpil 的命令用来将托管函数的汇编指令转成可读的 IL 代码。

        1.4、观察 C# 代码
            要观察 C# 代码,需要将内存中的 module 给剥离出来,然后使用 ILSpy 或者 DnSpy 等反编译工具反转即可。这就需要使用 Windbg 的【!savemodule】命令。大家也要防止 Dump 泄露,这个是严重的,别人就可以看到你的完整代码。
        
    2、杂项命令
        2.1、获取 CLR 版本、GC模式
            如果想获取 CLR 的版本,可以使用【!eeversion】命令,当然,我们也可以通过查看堆的数量,来了解 GC 模式,使用【!eeheap -gc】命令。

        2.2、查看线程栈对象
            如果我们想查看线程栈上的对象,一般都会使用【!clrstack -a】命令,但是这个命令只是看表面,不能映射到对象,那么我们可以使用【!dso】命令,这个命令可以把线程栈中的所有对象全部显示出来。

标签:11,总结,查看,汇编,代码,命令,Net,调试
From: https://www.cnblogs.com/lmyy/p/17831363.html

相关文章

  • 11月8日总结
    引言:事件循环不是浏览器独有的,从字面上看,“循环”可以简单地认为就是重复,比如for循环,就是重复地执行for循环体中的语句,所以事件循环,可以理解为重复地处理事件,那么下一个问题是,处理的是什么事件,事件的相关信息从哪里获取。因为我没有用nodejs做过什么项目,所以这里我暂且只关注浏......
  • 11月7日总结
    从源代码到可运行的操作系统(前置知识)API与SDK以C语言编写的操作系统为背景进行介绍,EOS是由C语言编写的操作系统和应用程序之间一个重要的纽带就是应用程序接口(简称API)。操作系统通过开放API为应>用程序提供服务,应用程序通过使用这些API实现其功能。在操作系统或......
  • 11月10日总结
    最近在群里,有个小伙伴问了这么一道很有趣的问题:CSS能否实现,容器再某个高度下是某种表现,一旦超出某个高度,则额外展示另外一些内容为了简化实际效果,我们看这么一张示意效果图:可以看到,当容器高度没有超过某一个值时,没有箭头图标。反之,箭头图标出现。这个效果在很多场景都会出现......
  • 202311141210——《一些修改表字段的sql语句》
    ALTERTABLEuserADDCOLUMNtelCHAR(11)AFTERwechat;#添加列ALTERtablecustomermodifycolumnpasswordvarchar(200);#修改列类型ALTERTABLEuserALTERCOLUMNstatusSETDEFAULT1;#设置默认值ALTERTABLEuserMODIFYcolumnemp_idTIMESTAMPDEFAULTNULL......
  • 11.14算法
    题目岛屿数量给你一个由 '1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例1:输入:grid=[["1","1","1","1","0"],["1","1"......
  • win11安装WSL2并配置Ubuntu环境
    win11安装WSL2并配置Ubuntu环境WSL是适用于 Linux 的 Windows 子系统,可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。1    开启windows的WSL与虚拟平台支持1.1    开启虚拟化......
  • 当前不会命中断点 未加载该文档 解决方法总结
    1.工具->选项->调试->常规 2.项目属性页 3.项目属性页 4.项目属性页 ......
  • tmdb 无法连接 修改host可解决 (2023/11/14)
    tinyMediaManager的刮削服务总是失败,根本原因在于tmdb网站的DNS地址无法解析。解决方法:手动修改DNS。作者:PH34Rhttps://www.bilibili.com/read/cv18215732/?spm_id_from=333.999.collection.opus.click出处:bilibili通过 https://dnschecker.org/ 查询上述三个地址,选择在......
  • nfls 11.14
    这回感觉每个题都可做,但是每个题目貌似又是都不可以做,思路到中间然后就断了,下午补题然后再看吧。T1这个题目可以推出来的性质有:我们填入的\(b\)数组一定是若干个质数的一次方的乘积组成。当我们确定了\(b_n\)时,我们这个\(b\)序列也就唯一固定。但是最后一位怎么决策......
  • 对几种语言的数据结构的总结
    一:Java中的数据结构Java中有以下几种数据结构:线性结构:数组、链表、哈希表、队列、栈。非线性结构:堆、树(二叉树、B树、B+树、红黑树)、图。二:C语言中的数据结构C语言中常用的数据结构包括:线性结构:数组、链表、栈、队列、线性表。树形结构:二叉树、堆、哈夫曼树、红黑树。图形结构:图......