首页
社区
课程
招聘
[旧帖] [求助]召唤.net达人研究cutechat 0.00雪花
发表于: 2007-10-11 12:44 4599

[旧帖] [求助]召唤.net达人研究cutechat 0.00雪花

2007-10-11 12:44
4599
asp.net下的聊天软件
官网:http://cutesoft.net/Default.aspx

无论是删除强名还是替换运行直接报错

程序内的强名检查都做了处理依旧是无法运行

看到可疑部分是:
  Dim iLGenerator As ILGenerator = methodInfoBody.GetILGenerator
    Dim str As String = Me.a(A_0, A_1)
    Dim label As Label = iLGenerator.DefineLabel
    iLGenerator.Emit(OpCodes.Ldarg_0)
    iLGenerator.Emit(OpCodes.Ldfld, field)
    iLGenerator.Emit(OpCodes.Brtrue, label)
    iLGenerator.Emit(OpCodes.Ldarg_0)
    iLGenerator.Emit(OpCodes.Ldarg_0)
    iLGenerator.Emit(OpCodes.Callvirt, GetType(InterfaceBase).GetMethod("get_Connection", (BindingFlags.NonPublic Or (BindingFlags.Public Or BindingFlags.Instance))))
    iLGenerator.Emit(OpCodes.Ldstr, str)
    iLGenerator.Emit(OpCodes.Newobj, GetType(QueryCommand).GetConstructor(New Type() { GetType(QueryConnection), GetType(String) }))
    iLGenerator.Emit(OpCodes.Stfld, field)
    iLGenerator.MarkLabel(label)
    Dim method As MethodInfo = GetType(QueryCommand).GetMethod("Execute", (BindingFlags.Public Or BindingFlags.Instance))
    Dim meth As MethodInfo = GetType(QueryCommand).GetMethod("SetParameter", (BindingFlags.Public Or BindingFlags.Instance))
    Dim info4 As MethodInfo = GetType(QueryCommand).GetMethod("GetParameter", (BindingFlags.Public Or BindingFlags.Instance))
    Dim k As Integer
    For k = 0 To parameters.Length - 1
        Dim info5 As ParameterInfo = parameters(k)
        iLGenerator.Emit(OpCodes.Ldarg_0)
        iLGenerator.Emit(OpCodes.Ldfld, field)
        iLGenerator.Emit(OpCodes.Ldstr, info5.Name)
        iLGenerator.Emit(OpCodes.Ldtoken, info5.ParameterType)
        If info5.ParameterType.IsValueType Then
            iLGenerator.Emit(OpCodes.Ldarg, CInt((k + 1)))
            iLGenerator.Emit(OpCodes.Box, info5.ParameterType)
        Else
            iLGenerator.Emit(OpCodes.Ldarg, CInt((k + 1)))
        End If
        iLGenerator.Emit(OpCodes.Callvirt, meth)
    Next k
    iLGenerator.Emit(OpCodes.Ldarg_0)
    iLGenerator.Emit(OpCodes.Ldfld, field)
    iLGenerator.Emit(OpCodes.Callvirt, method)
    Dim m As Integer
    For m = 0 To parameters.Length - 1
        Dim info6 As ParameterInfo = parameters(m)
        If (info6.IsOut OrElse info6.ParameterType.IsByRef) Then
            iLGenerator.Emit(OpCodes.Ldarg_0)
            iLGenerator.Emit(OpCodes.Ldfld, field)
            iLGenerator.Emit(OpCodes.Ldstr, info6.Name)
            iLGenerator.Emit(OpCodes.Callvirt, info4)
            If info6.ParameterType.IsValueType Then
                iLGenerator.Emit(OpCodes.Unbox, info6.ParameterType)
                iLGenerator.Emit(OpCodes.Ldobj, A_1.ReturnType)
                iLGenerator.Emit(OpCodes.Starg, CInt((m + 1)))
            Else
                iLGenerator.Emit(OpCodes.Starg, CInt((m + 1)))
            End If
        End If
    Next m
    If (Not A_1.ReturnType Is GetType(Void)) Then
        iLGenerator.Emit(OpCodes.Ldarg_0)
        iLGenerator.Emit(OpCodes.Ldfld, field)
        iLGenerator.Emit(OpCodes.Callvirt, GetType(QueryCommand).GetMethod("get_ReturnValue", (BindingFlags.Public Or BindingFlags.Instance)))
        If (Not A_1.ReturnType Is GetType(Object)) Then
            If A_1.ReturnType.IsValueType Then
                iLGenerator.Emit(OpCodes.Unbox, A_1.ReturnType)
                iLGenerator.Emit(OpCodes.Ldobj, A_1.ReturnType)
            Else
                iLGenerator.Emit(OpCodes.Castclass, A_1.ReturnType)
            End If
        End If
    End If
    iLGenerator.Emit(OpCodes.Ret)
    Me.e.DefineMethodOverride(methodInfoBody, A_1)

看不太懂,应该是运行时替换某方法il

有兴趣的可以试试

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 204
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
顶一下,看看是否有人遇到过
2007-10-18 21:06
0
游客
登录 | 注册 方可回帖
返回
//