工欲善其事,必先利其器。这一节我谈的就是我们用于研究IL的工具。
第一篇文章贴出来之后,网上有朋友问我“能不能看到c#程序的IL代码?”。看来还有些朋友对IL的编译与反编译还不太熟悉,所以我个人认为写一篇关于工具的文章还是有必要的。我们的工具主要有三个,第一个是dumpbin,可以把exe,obj,dll等bump出来然我们它们的PE结构,关于PE结构的讨论前一段时间比较热,网络上杂志上都有很多资料。(如果你先麻烦懒得去找的话,那你就等着什么时候我也来写一篇吧J)。另外两个是ilasm和ildasm,上次的文章中我们已经提到过了,分别是IL的编译器和反编译器。dumpbin, ilasm的说明已经比较详细了。你可以启动Visual Studio .NET命令提示,键入“dumpbin /?”,“ilasm /?”或“ildasm /?”,Enter,就可以看到在三个应用程序的命令行帮助了。更为详细的MSDN资料如下:
dumpbin:ms-help://MS.VSCC/MS.MSDNVS.2052/vccore/html/_core_dumpbin_reference.htm
ilasm:ms-help://MS.VSCC/MS.MSDNVS.2052/cptools/html/cpconmsilassemblerilasmexe.htm
ildasm:ms-help://MS.VSCC/MS.MSDNVS.2052/cptools/html/cpconmsildisassemblerildasmexe.htm
(不过你要安装了Visual Studio.NET整合的MSDN才能看到。)
这些我都不想再说了,自己去看吧。我下面要讲的是一个不太容易被人们发现的东西——ildasm的高级选项。
你在Visual Studio .NET命令提示下输入“ildasm /?”看看有什么东西,然后在输入“ildasm /ADV /?”再看看多了什么东西(ADV就是Advanced的意思)。我们第一个输入下是看不到ADV选项的,在第二个输入下我们看到了多出了几个高级选项。这些高级选项对于那些以.net平台为目标的工具开发者很有益处。
可供选择的命令行高级参数如下:
/ADV 以高级方式启动ildasm,在你启动ildasm后“视图”菜单中会出现一些高级选项。如果你是想使用命令行的方式进行反编译的话,“/ADV”必须写在其它选项前面前面,如“/ADV /CLASSLIST”等。
/STATS 显示镜像文件(你就把它理解为被你反编译的文件好了)的统计信息。
/CLASSLIST 包括本模块中定义的类的列表。
/ALL 包括 /HEADER, /BYTES, /STATS, /CLASSLIST, /TOKENS。
/METADATA[=<specifier>] 显示<specifier>所指定的MetaData,<specifier>包括:
MDHEADER 显示MetaData header包含的信息和大小。
HEX 显示更多十六进制表示的内容。
CSV 以逗号分隔的形式显示header的大小。(这里我没搞太懂L。)
UNREX 显示无法分析的外部对象。
VALIDATE 对metadata的一致性进行验证。(对于metadata我以后会有文章介绍。)

OK!差不多了,就先写到这里吧。

转载于:https://blog.51cto.com/zhoufoxcn/164407

IL系列文章之二:Make Best Use of Our Tools相关推荐

  1. oracle迁移postsql的,osdba's blog : Oracle迁移PostgreSQL系列文章之二:merge语句

    Oracle迁移PostgreSQL系列文章之二:merge语句 Posted on 2015-03-06 11:12:46 by osdba 我们知道,Oracle中有一个特别的merge语句.而P ...

  2. PHP 使用 hprose RPC 服务 系列文章之二——Codeigniter3中使用Hprose

    PHP 使用 hprose RPC 服务 系列文章之一--安装扩展 PHP 使用 hprose RPC 服务 系列文章之二--Codeigniter3中使用Hprose PHP 使用 hprose R ...

  3. 一步步实现windows版ijkplayer系列文章之二——Ijkplayer播放器源码分析之音视频输出——视频篇...

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

  4. 【理解 Cilium 系列文章】(二) 理解网络数据包的流转过程

    Cilium 作为近两年最火的云原生网络方案,可谓是风头无两.作为第一个通过 ebpf 实现了 kube-proxy 所有功能的网络插件,它的神秘面纱究竟是怎样的呢?本系列文章将带大家一起来慢慢揭晓 ...

  5. DM 源码阅读系列文章(二)整体架构介绍

    2019独角兽企业重金招聘Python工程师标准>>> 作者:张学程 本文为 DM 源码阅读系列文章的第二篇,第一篇文章 简单介绍了 DM 源码阅读的目的和规划,以及 DM 的源码结 ...

  6. openstack系列文章(二)

    学习openstack的系列文章-keystone openstack 架构 Keystone 基本概念 Keystone 工作流程 Keystone Troubleshooting 1.  open ...

  7. html5 Game开发系列文章之 二 精灵(下)

    昨天在家装了IE9,感觉不错,界面终于清爽了,跑HTML5也还不错!期待IE10正式版! 上一节我简单了介绍了HTML5 canvas 中的 drawImage方法,并绘制了一条扇动翅膀的小红龙,那么 ...

  8. TiKV 源码解析系列文章(二)raft-rs proposal 示例情景分析

    作者:屈鹏 本文为 TiKV 源码解析系列的第二篇,按照计划首先将为大家介绍 TiKV 依赖的周边库 raft-rs .raft-rs 是 Raft 算法的 Rust 语言实现.Raft 是分布式领域 ...

  9. Qt系列文章之二十五(使用QAudiolnput获取音频输入)

    文章目录 前言 效果图 QAudioInput获取音频输入功能概述 程序主窗口定义与初始化 音频输入设备支持的格式 开始音频输入 流设备MineDisplayDevice的功能实现 源码获取 前言   ...

最新文章

  1. 在NVIDIA A100 GPU中使用DALI和新的硬件JPEG解码器快速加载数据
  2. java包和继承的区别,子类和父类在同一个包中继承性
  3. 如何在钉钉上开发自己的应用_神操作!老妈让我告诉老板,双十一买钉钉。
  4. 【渝粤题库】广东开放大学 质量管理 形成性考核 (2)
  5. Kubernetes 的原理
  6. 前端干货之JS最佳实践
  7. Windows环境下log4cxx的编译及使用(转载)
  8. 初识Unity SRP
  9. VBS命令:关于以管理员身份运行程序的VBS命令
  10. u盘需要计算机管理权限,u易u盘需要管理员权限的文件怎么删除
  11. 东北师范大学计算机研究生拟录取名单,东北师范大学2016年硕士研究生拟录取名单公示...
  12. 20172328的结对编程四则运算第二周-整体总结
  13. 用计算机绘制函数图像数学大师,用Excel来绘制数学中的函数图像
  14. 【复合五点高斯-勒让德公式】
  15. linux ipv6添加路由器,使用Linux搭建IPV6路由器(CentOS版)
  16. 雷林鹏最人性化访谈:做投资不仅仅是要赚钱,要成为有价值的人
  17. 微信电脑版怎么多开分身?
  18. linux英伟达显卡驱动390下载,nvidia英伟达驱动|NVIDIA英伟达显卡驱动程序更新下载(32/64位) v384.90 Linux版 - 飞极下载站...
  19. Vmware为虚拟机添加硬盘操作详解
  20. 5G服务对用户的套路,让消费者对5G产生了更多疑虑

热门文章

  1. 设计模式:单例模式的写法(基础写法和线程安全写法)
  2. java多线程 -- 同步鎖
  3. open-falcon
  4. pl/sql developer导入导出
  5. cocos2d-xna在使用某些场景转换效果时的问题以及修复
  6. linq绑定下拉列表,combobox中增加listitem的方法,增加“请选择”
  7. SQL语句大全(2)
  8. 《我的青春谁做主》我想要的结局
  9. 向silverlight传递自定义参数
  10. superset可视化-word cloud