简介

代码审查就是观察代码,代码形态分为三种C#代码>IL代码》汇编代码。通过代码审查,可以从原始代码的字节流中推测出逻辑详情

高级调试本质上属于逆向分析,更多的是以汇编为主。

反汇编代码

u(unassemble)

命令u把字节流反汇编为汇编指令

还有一个变种ub,uf。 u是向下反汇编,ub是向上反汇编

uf是显示整个函数的返汇编代码

!U

由于sos拓展更清楚CLR的内部细节,因此!U的能够对程序集进行标注(给内存地址打上注释).从而使得反汇编指令更加可读



我们可以看到,同一段代码。!U命令反汇编的可读性更加高

获取方法描述符

有时候使用

!ip2md (instruction pointer to method descriptor)



除了方法的名字外,还额外显示了其他一些信息。方法描述符,方法表,JIT状态,代码地址等。要想快速找出汇编代码位于哪个函数中,会很方便

!name2ee

格式为 模块的名字和方法的全名



同样可以获取方法描述符

观察IL代码

!dumpil

sos提供了!dumpil 命令将托管函数的汇编反编译成IL代码,但不适用内存地址作为参数。而是以方法描述符为参数

观察C#代码

!savemodule

参数为module address.可以使用之前介绍的!ip2md或者!name2ee 来获取module地址



结论

dump文件不要轻易给别人分析,可以从任何角度反编译你的代码。

杂项命令

!eeversion 获取CLR版本

不仅能看到clr版本,还能看到sos版本以及CLR当前的运作模式(服务器模式还是工作站模式)

!gcroot 引用关系



这个命令非常实用,用来判断某一个对象的引用以及为什么没有被GC回收

!FinAppDomain 找出对象的应用程序域

!ProcInfo 转储进程信息

在调试过程中,有时候获得被调试的进程更多信息会非常有用。比如内存使用量,环境变量,处理时间等

有三个变种

  1. -env
  2. -time
  3. -men

.NET高级调试 - 3.9~3.11代码审查以及杂项命令的更多相关文章

  1. [Android Studio 权威教程]断点调试和高级调试

    好了开始写一个简单的调试程序,我们先来一个for循环 ? 1 2 3 4 5 6 7 8 <code class="language-java hljs ">for ( ...

  2. ###Android 断点调试和高级调试###

    转自:http://www.2cto.com/kf/201506/408358.html 有人说Android 的调试是最坑的,那我只能说是你不会用而已,我可以说Android Studio的调试是我 ...

  3. Visual Studio高级调试技巧

    1. 设置软件断点,运行到目标位置启动调试器 方法①:使用汇编指令(注:x64 c++不支持嵌入汇编) _asm 方法②:编译器提供的方法 __debugbreak(); 方法③:使用windows ...

  4. Android Stuido中断点调试和高级调试

    写一个简单的调试程序 import android.os.Bundle; import android.support.v7.app.AppCompatActivity; public class M ...

  5. Linux高级调试与优化——gdb调试命令

    番外 2019年7月26日至27日,公司邀请<软件调试>和<格蠹汇编——软件调试案例集锦>两本书的作者张银奎老师进行<Linux高级调试与优化>培训,有幸聆听张老师 ...

  6. .NET高级调试系列-Windbg调试入门篇

    Windbg是.NET高级调试领域中不可或缺的一个工具和利器,也是日常我们分析解决问题的必备.准备近期写2篇精华文章,集中给大家分享一下如果通过Windbg进行.NET高级调试. 今天我们来一篇入门的 ...

  7. 玩好.NET高级调试,你也要会写点汇编

    一:背景 1. 简介 .NET 高级调试要想玩的好,看懂汇编是基本功,但看懂汇编和能写点汇编又完全是两回事,所以有时候看的多,总手痒痒想写一点,在 Windows 平台上搭建汇编环境不是那么容易,大多 ...

  8. 高级Bash脚本编程指南(27):文本处理命令(三)

    高级Bash脚本编程指南(27):文本处理命令(三) 成于坚持,败于止步 处理文本和文本文件的命令 tr 字符转换过滤器. 必须使用引用或中括号, 这样做才是合理的. 引用可以阻止shell重新解释出 ...

  9. myeclipse web servelet调试输入的中文在TOMCAT服务器的命令行显示为????

    B 问题:myeclipse web servelet调试输入的中文在TOMCAT服务器的命令行显示为???? 解决:调整JSP页面编码:gb2312--->utf-8

  10. Linux高级调试与优化——信号量机制与应用程序崩溃

    背景介绍 Linux分为内核态和用户态,用户态通过系统调用(syscall)进入内核态执行. 用户空间的glibc库将Linux内核系统调用封装成GNU C Library库文件(兼容ANSI &am ...

随机推荐

  1. DrawIO安装及基本使用教程

    1.DrawIO简介 DrawIO 是一款开源免费且功能强大的绘图工具,可以用于绘制流程图.组织结构图.网络图.UML图等各种类型的图表: DrawIO 支持多种文件格式,包括XML.PNG.SVG等 ...

  2. 【Java】Springboot 响应外切 实现数据脱敏

    实现效果: 1.脱敏注解在模型类进行标记 package cn.cloud9.server.test.model; import cn.cloud9.server.struct.masking.ann ...

  3. 【Docker】02 上手入门

    环境前提: 软硬件设备:真机 | 服务器 | 虚拟机 操作系统:Linux 协议传输工具:XSHELL等等,直接操作就不用了 网路:必须得有 Docker的安装: 还好在学Linux的时候装了一下,发 ...

  4. 【TypeScript】02 面向对象

    [联合类型] 联合类型(Union Types)可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值. 注意:只能赋值指定的类型,如果赋值其它类型就会报错. var val:strin ...

  5. XML 教程——检视阅读

    基本 XML 简介 XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据.HTML 被设计用来显示数据. 什么是 XML? XML 指可 ...

  6. 【转载】 传统PID算法解决不了的情况,应该怎么办?

    原文地址: http://www.51hei.com/bbs/dpj-152844-1.html --------------------------------------------------- ...

  7. ImageNet数据集下载

    ImageNet数据集是Vision领域最重要的数据集之一,十分经典也十分常用,但是该数据集体量较大,而且由于在外网下载速度较慢,其中最为重要的一点是该数据集只提供给高校科研工作者,这也就意味着你必须 ...

  8. .NET中各种线程同步锁

    编程编的久了,总会遇到多线程的情况,有些时候我们要几个线程合作完成某些功能,这时候可以定义一个全局对象,各个线程根据这个对象的状态来协同工作,这就是基本的线程同步. ​支持多线程编程的语言一般都内置了 ...

  9. [计算机网络] IPv6

    1 IPv6 概述 引言 近期突发奇想,能不能用 IPv6 的公网地址,给家里的 NAS 做 内网穿透. 技术上是可行的.只是必须确保是 IPv6 的公网地址. 大学学的 IPv6 的知识,早就抛到九 ...

  10. Snap 使用

    Snap 是一个或多个应用程序的捆绑包,可在许多不同的 Linux 发行版中使用,无需依赖或修改.Snap 可从 Snap Store(一个拥有数百万用户的公共应用程序商店)中发现和安装.很多常用的软 ...