你那个战神的挑战修改器2的修改器还有么 我也要啊 6949...

1·80无情战神
1·80无情战神
今日火爆新区
1·80无情战神
今日火爆新区
【激情耐玩】【隆重面世】
郑重声明:公司化运营。绝对长期、公平、公正、免费、稳定。
新区3天抢沙:奖励40000元宝;老区天天抢沙:奖励20000元宝
点卡赠送
点卡赠送
本 服 特 色 介 绍
1:新手玩家上线可以通过“太极八阵”进入地图迅速提升实力
2:土城“休息室”无限激情免费泡点到终极是玩家PK打宝场所
3:土城“幸运大轮盘”回收祖玛、赤月装备、元宝、经验爽爽
4:土城“超级宝藏”每一小时全区所有玩家参与3大神器爆爆爆
5:“秦始皇陵” 此地图每秒自动增加5万经验打宝练级两不误
 6: 所有装备都可以在各地图暴,终极战神在所有BOSS身上暴出
7:“超级大奖”天天送,各种活动爽不完,散人玩家首选的服声明:本文内容主要译自Nauman Leghari的Using log4net,亦加入了个人的一点心得(节3.1.4)。
请在这里下载
Log4net
的优点:
几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。
经验表明,日志记录往往是软件开发周期中的重要组成部分。它具有以下几个优点:它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug;一旦在程序中加入了Log输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预。另外,日志信息可以输出到不同的地方(控制台,文件等)以备以后研究之用。
Log4net就是为这样一个目的设计的,用于.NET开发环境的日志记录包。
Log4net
的***:
用户可以从
下载log4net的源代码。解压软件包后,在解压的src目录下将log4net.sln载入Visual Studio .NET,编译后可以得到log4net.dll。用户要在自己的程序里加入日志功能,只需将log4net.dll引入工程即可。 2
Log4net
的结构
log4net有四种主要的组件,分别是Logger(记录器), Repository(库), A ender(附着器)以及Layout(布局).
Logger是应用程序需要交互的主要组件,它用来产生日志消息。产生的日志消息并不直接显示,还要预先经过Layout的格式化处理后才会输出。
Logger提供了多种方式来记录一个日志消息,你可以在你的应用程序里创建多个Logger,每个实例化的Logger对象都被log4net框架作为命名实体(named entity)来维护。这意味着为了重用Logger对象,你不必将它在不同的类或对象间传递,只需要用它的名字为参数调用就可以了。log4net框架使用继承体系,继承体系类似于.NET中的名字空间。也就是说,如果有两个logger,分别被定义为a.b.c和a.b,那么我们说a.b是a.b.c的祖先。每一个logger都继承了祖先的属性
一、CIL的基本构成
CIL由CIL指令(directive)、CIL特性(attribute)、CIL操作码(opcode)组成。
CIL指令
CIL指令是用于描述.NET程序集总体结构的标记,并且通知CIL编译器如何定义在程序集中用到的命名空间、类、成员的。它以(.)一个点号开头,例如:.name ace、.cla 、.property、.method等构成。
CIL特性
CIL特性是由于CIL指令并不能完全说明.NET成员和类的情况下,针对CIL指令进行补充说明成员或者类的特性的。比如一个类可能是公共的,集成的。它就需要用public特性、extends特性或者implements特性对类的.cla 指令进行修饰的补充说明。
CIL操作码
CIL操作码是对于类或者方法的内部逻辑进行描述和操作的代码,例如Add(将两个值相加并将结果推送到计算堆栈上)、Ldarg(将参数(由指定索引值引用)加载到堆栈上)Ldloc.0(将索引 0 处的局部变量加载到计算堆栈上)等其主要分为以下五大类操作:(数据)的压栈(ld)、弹出(st)、运算、转移、其他、
二、CIL操作码速记表
通过下面的速记表我们可以很容易的记忆CIL的指令:比如我们知道一个ldloc.0=ld(load)+loc(local)+.0(0位置的参数)=将索引 0 处的局部变量加载到计算堆栈上。
主要操作
操作数范围/条件
操作数类型
操作数
将操作数压到堆栈当中,相当于:
push ax
argument
操作数中的数值
第零个参数 *
第一个参数
第二个参数
第三个参数
(short)
参数xx
addre 操作数的地址
只有 .s xx,参见ldarg.s
局部变量
参见ldarg
字段(类的全局变量)
参见ldarg
xx字段,eg:
ldfld xx
int 4 bytes
C#里面的int,其他的类型例如short需要通过conv转换
minus 1
(short)
后面跟一个字节以内的整型数值(有符号的)
后面跟四个字节的整型数值
int 8 bytes
C#里面的long
后面跟八个字节的整型数值
real 4 bytes
C#里面的float
后面跟四个字节的浮点数值
real 8 bytes
C#里面的double
后面跟八个字节的浮点数值
空值(也就是0)
将堆栈内容弹出到操作数中,相当于:
参见ld **
convert
数值类型转换,仅仅用纯粹的数值类型间的转换,例如int/float等
int 1 bytes
C#里面的 yte
int 2 bytes
C#里面的short
int 4 bytes
C#里面的int
int 8 bytes
C#里面的long
real 4 bytes
C#里面的float
real 8 bytes
C#里面的double
uint 4 bytes
C#里面的uint
uint 8 bytes
C#里面的ulong
条件和无条件跳转,相当于:
jmp/jxx label_jump
无条件跳转
后面跟四个字节的偏移量(有符号)
(short)
后面跟一个字节的偏移量(有符号)
值为零的时候跳转
参见br
值不为零的时候跳转
equal to
not equal to
不相等
u igned or unordered
无氟好的(对于整数)或者无序的(对于浮点)
greater than
le than
greater than or equal to
大于等于
le than or equal to
小于等于
(非虚函数)
? 三、CIL操作码大全速查
通过下面的速查大全即可快速的查找CIL指令的作用。
将两个值相加并将结果推送到计算堆栈上。
Add.Ovf
将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上。
Add.Ovf.Un
将两个无符号整数值相加,执行溢出检查,并且将结果推送到计算堆栈上。
计算两个值的按位“与”并将结果推送到计算堆栈上。
Arglist
返回指向当前方法的参数列表的非托管指针。
如果两个值相等,则将控制转移到目标指令。
如果两个值相等,则将控制转移到目标指令(短格式)。
如果第一个值大于或等于第二个值,则将控制转移到目标指令。
如果第一个值大于或等于第二个值,则将控制转移到目标指令(短格式)。
当比较无符号整数值或不可排序的浮点型值时,如果第一个值大于第二个值,则将控制转移到目标指令。
Bge.Un.S
当比较无符号整数值或不可排序的浮点型值时,如果第一个值大于第二个值,则将控制转移到目标指令(短格式)。
如果第一个值大于第二个值,则将控制转移到目标指令。
如果第一个值大于第二个值,则将控制转移到目标指令(短格式)。
当比较无符号整数值或不可排序的浮点型值时,如果第一个值大于第二个值,则将控制转移到目标指令。
Bgt.Un.S
当比较无符号整数值或不可排序的浮点型值时,如果第一个值大于第二个值,则将控制转移到目标指令(短格式)。
如果第一个值小于或等于第二个值,则将控制转移到目标指令。
如果第一个值小于或等于第二个值,则将控制转移到目标指令(短格式)。
当比较无符号整数值或不可排序的浮点型值时,如果第一个值小于或等于第二个值,则将控制转移到目标指令。
Ble.Un.S
当比较无符号整数值或不可排序的浮点值时,如果第一个值小于或等于第二个值,则将控制权转移到目标指令(短格式)。
如果第一个值小于第二个值,则将控制转移到目标指令。
如果第一个值小于第二个值,则将控制转移到目标指令(短格式)。
当比较无符号整数值或不可排序的浮点型值时,如果第一个值小于第二个值,则将控制转移到目标指令。
Blt.Un.S
当比较无符号整数值或不可排序的浮点型值时,如果第一个值小于第二个值,则将控制转移到目标指令(短格式)。
当两个无符号整数值或不可排序的浮点型值不相等时,将控制转移到目标指令。
Bne.Un.S
当两个无符号整数值或不可排序的浮点型值不相等时,将控制转移到目标指令(短格式)。
将值类转换为对象引用(O 类型)。
无条件地将控制转移到目标指令。
无条件地将控制转移到目标指令(短格式)。
向公共语言结构 (CLI) 发出信号以通知调试器已撞上了一个断点。
Brfalse
如果 value 为 false、空引用(Visual Basic 中的 Nothing)或零,则将控制转移到目标指令。
Brfalse.S
如果 value 为 false、空引用或零,则将控制转移到目标指令。
如果 value 为 true、非空或非零,则将控制转移到目标指令。
Brtrue.S
如果 value 为 true、非空或非零,则将控制转移到目标指令(短格式)。
调用由传递的方法说明符指示的方法。
通过调用约定描述的参数调用在计算堆栈上指示的方法(作为指向入口点的指针)。
Callvirt
对对象调用后期绑定方法,并且将返回值推送到计算堆栈上。
Castcla 尝试将引用传递的对象转换为指定的类。
比较两个值。如果这两个值相等,则将整数值 1 (int32) 推送到计算堆栈上;否则,将 0 (int32) 推送到计算堆栈上。
比较两个值。如果第一个值大于第二个值,则将整数值 1 (int32) 推送到计算堆栈上;反之,将 0 (int32) 推送到计算堆栈上。
比较两个无符号的或不可排序的值。如果第一个值大于第二个值,则将整数值 1 (int32) 推送到计算堆栈上;反之,将 0 (int32) 推送到计算堆栈上。
Ckfinite
如果值不是有限数,则引发 ArithmeticException。
比较两个值。如果第一个值小于第二个值,则将整数值 1 (int32) 推送到计算堆栈上;反之,将 0 (int32) 推送到计算堆栈上。
比较无符号的或不可排序的值 value1 和 value2。如果 value1 小于 value2,则将整数值 1 (int32 ) 推送到计算堆栈上;反之,将 0 ( int32 ) 推送到计算堆栈上。
Co trained
约束要对其进行虚方法调用的类型。
将位于计算堆栈顶部的值转换为 native int。
Conv.I1
将位于计算堆栈顶部的值转换为 int8,然后将其扩展(填充)为 int32。
Conv.I2
将位于计算堆栈顶部的值转换为 int16,然后将其扩展(填充)为 int32。
Conv.I4
将位于计算堆栈顶部的值转换为 int32。
Conv.I8
将位于计算堆栈顶部的值转换为 int64。
Conv.Ovf.I
将位于计算堆栈顶部的有符号值转换为有符号 native int,并在溢出时引发 OverflowException。
Conv.Ovf.I.Un
将位于计算堆栈顶部的无符号值转换为有符号 native int,并在溢出时引发 OverflowException。
Conv.Ovf.I1
将位于计算堆栈顶部的有符号值转换为有符号 int8 并将其扩展为 int32,并在溢出时引发 OverflowException。
Conv.Ovf.I1.Un
将位于计算堆栈顶部的无符号值转换为有符号 int8 并将其扩展为 int32,并在溢出时引发 OverflowException。
Conv.Ovf.I2
将位于计算堆栈顶部的有符号值转换为有符号 int16 并将其扩展为 int32,并在溢出时引发 OverflowException。
Conv.Ovf.I2.Un
将位于计算堆栈顶部的无符号值转换为有符号 int16 并将其扩展为 int32,并在溢出时引发 OverflowException。
Conv.Ovf.I4
将位于计算堆栈顶部的有符号值转换为有符号 int32,并在溢出时引发 OverflowException。
Conv.Ovf.I4.Un
将位于计算堆栈顶部的无符号值转换为有符号 int32,并在溢出时引发 OverflowException。
Conv.Ovf.I8
将位于计算堆栈顶部的有符号值转换为有符号 int64,并在溢出时引发 OverflowException。
Conv.Ovf.I8.Un
将位于计算堆栈顶部的无符号值转换为有符号 int64,并在溢出时引发 OverflowException。
Conv.Ovf.U
将位于计算堆栈顶部的有符号值转换为 u igned native int,并在溢出时引发 OverflowException。
Conv.Ovf.U.Un
将位于计算堆栈顶部的无符号值转换为 u igned native int,并在溢出时引发 OverflowException。
Conv.Ovf.U1
将位于计算堆栈顶部的有符号值转换为 u igned int8 并将其扩展为 int32,并在溢出时引发 OverflowException。
Conv.Ovf.U1.Un
将位于计算堆栈顶部的无符号值转换为 u igned int8 并将其扩展为 int32,并在溢出时引发 OverflowException。
Conv.Ovf.U2
将位于计算堆栈顶部的有符号值转换为 u igned int16 并将其扩展为 int32,并在溢出时引发 OverflowException。
Conv.Ovf.U2.Un
将位于计算堆栈顶部的无符号值转换为 u igned int16 并将其扩展为 int32,并在溢出时引发 OverflowException。
Conv.Ovf.U4
将位于计算堆栈顶部的有符号值转换为 u igned int32,并在溢出时引发 OverflowException。
Conv.Ovf.U4.Un
将位于计算堆栈顶部的无符号值转换为 u igned int32,并在溢出时引发 OverflowException。
Conv.Ovf.U8
将位于计算堆栈顶部的有符号值转换为 u igned int64,并在溢出时引发 OverflowException。
Conv.Ovf.U8.Un
将位于计算堆栈顶部的无符号值转换为 u igned int64,并在溢出时引发 OverflowException。
Conv.R.Un
将位于计算堆栈顶部的无符号整数值转换为 float32。
Conv.R4
将位于计算堆栈顶部的值转换为 float32。
Conv.R8
将位于计算堆栈顶部的值转换为 float64。
将位于计算堆栈顶部的值转换为 u igned native int,然后将其扩展为 native int。
Conv.U1
将位于计算堆栈顶部的值转换为 u igned int8,然后将其扩展为 int32。
Conv.U2
将位于计算堆栈顶部的值转换为 u igned int16,然后将其扩展为 int32。
Conv.U4
将位于计算堆栈顶部的值转换为 u igned int32,然后将其扩展为 int32。
Conv.U8
将位于计算堆栈顶部的值转换为 u igned int64,然后将其扩展为 int64。
将指定数目的字节从源地址复制到目标地址。
将位于对象(&am 、* 或 native int 类型)地址的值类型复制到目标对象(&am 、* 或 native int 类型)的地址。
将两个值相除并将结果作为浮点(F 类型)或商(int32 类型)推送到计算堆栈上。
两个无符号整数值相除并将结果 ( int32 ) 推送到计算堆栈上。
复制计算堆栈上当前最顶端的值,然后将副本推送到计算堆栈上。
Endfilter
将控制从异常的 filter 子句转移回公共语言结构 (CLI) 异常处理程序。
Endfinally
将控制从异常块的 fault 或 finally 子句转移回公共语言结构 (CLI) 异常处理程序。
Initblk
将位于特定地址的内存的指定块初始化为给定大小和初始值。
Initobj
将位于指定地址的值类型的每个字段初始化为空引用或适当的基元类型的 0。
测试对象引用(O 类型)是否为特定类的实例。
退出当前方法并跳至指定方法。
将参数(由指定索引值引用)加载到堆栈上。
Ldarg.0
将索引为 0 的参数加载到计算堆栈上。
Ldarg.1
将索引为 1 的参数加载到计算堆栈上。
Ldarg.2
将索引为 2 的参数加载到计算堆栈上。
Ldarg.3
将索引为 3 的参数加载到计算堆栈上。
Ldarg.S
将参数(由指定的短格式索引引用)加载到计算堆栈上。
将参数地址加载到计算堆栈上。
Ldarga.S
以短格式将参数地址加载到计算堆栈上。
将所提供的 int32 类型的值作为 int32 推送到计算堆栈上。
Ldc.I4.0
将整数值 0 作为 int32 推送到计算堆栈上。
Ldc.I4.1
将整数值 1 作为 int32 推送到计算堆栈上。
Ldc.I4.2
将整数值 2 作为 int32 推送到计算堆栈上。
Ldc.I4.3
将整数值 3 作为 int32 推送到计算堆栈上。
Ldc.I4.4
将整数值 4 作为 int32 推送到计算堆栈上。
Ldc.I4.5
将整数值 5 作为 int32 推送到计算堆栈上。
Ldc.I4.6
将整数值 6 作为 int32 推送到计算堆栈上。
Ldc.I4.7
将整数值 7 作为 int32 推送到计算堆栈上。
Ldc.I4.8
将整数值 8 作为 int32 推送到计算堆栈上。
Ldc.I4.M1
将整数值 -1 作为 int32 推送到计算堆栈上。
Ldc.I4.S
将提供的 int8 值作为 int32 推送到计算堆栈上(短格式)。
将所提供的 int64 类型的值作为 int64 推送到计算堆栈上。
将所提供的 float32 类型的值作为 F (float) 类型推送到计算堆栈上。
将所提供的 float64 类型的值作为 F (float) 类型推送到计算堆栈上。
按照指令中指定的类型,将指定数组索引中的元素加载到计算堆栈的顶部。
Ldelem.I
将位于指定数组索引处的 native int 类型的元素作为 native int 加载到计算堆栈的顶部。
Ldelem.I1
将位于指定数组索引处的 int8 类型的元素作为 int32 加载到计算堆栈的顶部。
Ldelem.I2
将位于指定数组索引处的 int16 类型的元素作为 int32 加载到计算堆栈的顶部。
Ldelem.I4
将位于指定数组索引处的 int32 类型的元素作为 int32 加载到计算堆栈的顶部。
Ldelem.I8
将位于指定数组索引处的 int64 类型的元素作为 int64 加载到计算堆栈的顶部。
Ldelem.R4
将位于指定数组索引处的 float32 类型的元素作为 F 类型(浮点型)加载到计算堆栈的顶部。
Ldelem.R8
将位于指定数组索引处的 float64 类型的元素作为 F 类型(浮点型)加载到计算堆栈的顶部。
Ldelem.Ref
将位于指定数组索引处的包含对象引用的元素作为 O 类型(对象引用)加载到计算堆栈的顶部。
Ldelem.U1
将位于指定数组索引处的 u igned int8 类型的元素作为 int32 加载到计算堆栈的顶部。
Ldelem.U2
将位于指定数组索引处的 u igned int16 类型的元素作为 int32 加载到计算堆栈的顶部。
Ldelem.U4
将位于指

参考资料

 

随机推荐