打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
(5)反编译C#的dll,exe文件修改源码并编译第4节
以下是本人根据源码与反编译的IL语法进行对比得到的结论.只供参考,如果出现思路偏差,概不负责哦!

ldstr   字符串->    将这个字符串压入栈,字符操作前的准备工作

newobj          ->    我理解为new一个对象   

stloc.0           ->    从栈中取出一个值放入一号变量.stloc.1便是放入2号变量

ldarg.0          ->    我理解为:加载当前方法传入的第一个参数; ldarg.1即为加载第二个参数

 br.s             ->       中止到代码标签  

 

以下是从网上搜索的一些资源整理

地址:http://www.cnblogs.com/Peter-Zhang/articles/2044794.html

感谢作者!

------------------------------------------------------------------------------

操作码                                          作用

add, sub, mul, div,rem                  用于两个数加减乘除求模

add, or, not,xor                           用于在两个值上进行二进制操作

ceq, cgt,clt                                   用不同的方法比较两个在栈上的值,ceq:是否相等;cgt:是否大约;clt:是否小于

box,unbox                                  在引用类型和值类型之间转换

ret                                               退出方法和返回一个值

beq, bgt, ble, blt,switch                控制方法中的条件分支,beg:如果相等就中止到代码标签;bgt:如果大于就中止到代码标签;

                                                  ble:如果小于等于就中止到代码标签;blt:如果小于就中止到代码标签;

                                                  所有的分支控制操作码都需要给出一个CIL代码标签作为条件为真的跳转目的

br.s                                             (无条件)中止到代码标签

call                                              调用一个成员

nearer,newobj                             在内存中创建一个新的数组或新的对象类型

 

主要的入栈CIL操作码  (ld 加载)

操作码                                          作用

ldarg(及多个变化形式)                     加载方法的参数到栈中。除了泛型ldarg(需要一个索引作为参数),还有后其他很多的变化形式。

                                                   eg.有个数字后缀的ldarg操作码来指定需要加载的参数。同时还有很多ldarg的变化形式允许加载

                                                  指定的数据类型(ldarg_i4, 加载int32)和值(ldarg_i4_5 加载一个值为5的int32)

ldc(及多个变化形式)                      加载一个常数到栈中

ldfld(及多个变化形式)                     加载一个对象实例的成员到栈中

ldloc(及多个变化形式)                     加载一个本地变量到栈中

ldobj                                           获得一个堆对象的所有数据,并将它们放置到栈中

ldstr                                            加载一个字符串数据到栈中

 

主要的弹出栈操作码 (st存储)

操作码                                          作用

pop                                             删除当前栈顶的值,但是并不影响存储的值

starg                                           存储栈顶的值到给出方法的参数,根据索引确定这个参数

stloc(及多个变化形式)                      弹出当前栈顶的值并存储在一个本地变量列表中,根据所以确定这个参数

stobj                                           从栈中复制一个特定的类型到指定的内存地址

stfld                                            用从栈中获得的值替换对象成员的值

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
linux内核扩展模块编译tun.ko
DelphiXE2内存加模块升级版.支持32位和64位模块.
DLL(Dynamic Link Libraries)
动态链接库、静态库区别与VS2005项目相关设置
原来这才是动态代理
asp.net页面指令和事件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服