示例#1
0
        internal void UpdateBreakpointsInModule(DebugModule module)
        {
            BreakpointMethod[] copy = new BreakpointMethod[_unresolved.Count];
            _unresolved.CopyTo(copy);

            foreach (var bp in copy)
            {
                var methods = module.ResolveAllFunctionName(bp.ClassName, bp.MethodName);
                if (methods == null) continue; // Sorry about this null. TODO: Refactor.

                foreach (var method in methods)
                {
                    Logger.WriteLine("Setting breakpoint at {0}.{1}", bp.ClassName, bp.MethodName);
                    var token = (uint)method.MetaData.MetadataToken;
                    if (_breakpointsMap.ContainsKey(token)) continue;
                    var bpWrapper = method.SetBreakpoint();
                    bp.Breakpoint = bpWrapper.Interface;
                    _breakpointsMap[token] = bp;
                }
            }
        }
示例#2
0
        private void ResolveNewMscrolibMethods(DebugModule mscorlib)
        {
            var assemblyLoadMethods = mscorlib.ResolveAllFunctionName("System.Reflection.Assembly", "Load");
            if (assemblyLoadMethods != null)
            {
                foreach (var method in assemblyLoadMethods)
                {
                    var methodParams = method.MetaData.GetParameters();
                    if (methodParams.Length == 1 && methodParams[0].Name == "rawAssembly")
                    {
                        _loadAssemblyMethod = method;

                        _byteCorType = mscorlib.FindType("System.Byte").GetDebugType();

                        Logger.WriteLine("Assembly.Load(byte[] rawAssembly) - method address resolved.");
                    }
                }
            }
            else
            {
                Logger.WriteLine("Could not find Assembly.Load() method in mscorlib. Something is wrong.");
            }
        }