Example #1
0
        private static void ClearBreakpoint(DkmProcess process, DkmRuntimeInstructionBreakpoint breakpoint)
        {
            var runtimeBreakpoints = process.GetOrCreateDataItem(() => new RuntimeDllBreakpoints());

            runtimeBreakpoints.Handlers.Remove(breakpoint.UniqueId);
            breakpoint.Close();
        }
Example #2
0
        public static PyTypeObject GetPyType <TObject>(DkmProcess process)
            where TObject : PyObject
        {
            var map = process.GetOrCreateDataItem(() => new ProxyTypes(process)).PyTypeFromType;

            return(map[typeof(TObject)]);
        }
Example #3
0
        private static DkmRuntimeInstructionBreakpoint CreateBreakpoint(DkmProcess process, ulong addr, RuntimeDllBreakpointHandler handler, bool enable)
        {
            var runtimeBreakpoints = process.GetOrCreateDataItem(() => new RuntimeDllBreakpoints());
            var bp = process.CreateBreakpoint(Guids.LocalComponentGuid, addr);

            if (enable)
            {
                bp.Enable();
            }
            runtimeBreakpoints.Handlers.Add(bp.UniqueId, handler);
            return(bp);
        }
Example #4
0
        private static ProxyInfo?FindProxyInfoForPyType(DkmProcess process, ulong typePtr)
        {
            if (typePtr == 0)
            {
                return(null);
            }

            ProxyInfo proxyInfo;
            var       map = process.GetOrCreateDataItem(() => new ProxyTypes(process)).ProxyInfoFromPyTypePtr;

            if (map.TryGetValue(typePtr, out proxyInfo))
            {
                return(proxyInfo);
            }

            // If we didn't get a direct match, look at tp_base and tp_bases.
            var typeObject    = new PyTypeObject(process, typePtr);
            var tp_base       = typeObject.tp_base.Raw.Read();
            var baseProxyInfo = FindProxyInfoForPyType(process, tp_base);

            if (baseProxyInfo != null)
            {
                return(baseProxyInfo);
            }

            var tp_bases = typeObject.tp_bases.TryRead();

            if (tp_bases != null)
            {
                foreach (var bas in tp_bases.ReadElements())
                {
                    baseProxyInfo = FindProxyInfoForPyType(process, bas.Raw.Read());
                    if (baseProxyInfo != null)
                    {
                        return(baseProxyInfo);
                    }
                }
            }

            return(null);
        }
Example #5
0
 public static PointerProxy <PyInterpreterState> interp_head(DkmProcess process)
 {
     return(process.GetOrCreateDataItem(() => new InterpHeadHolder(process)).Proxy);
 }
Example #6
0
 public static PythonRuntimeInfo GetPythonRuntimeInfo(this DkmProcess process)
 {
     return(process.GetOrCreateDataItem(() => new PythonRuntimeInfo()));
 }
Example #7
0
 public static PyObject None(DkmProcess process)
 {
     return(process.GetOrCreateDataItem(() => new NoneHolder(process)).None);
 }
Example #8
0
        void IDkmExceptionManager.ClearExceptionTriggers(DkmProcess process, Guid sourceId)
        {
            var em = process.GetOrCreateDataItem(() => new ExceptionManager(process));

            em.ClearExceptionTriggers(process, sourceId);
        }
Example #9
0
        void IDkmExceptionManager.AddExceptionTrigger(DkmProcess process, Guid sourceId, DkmExceptionTrigger trigger)
        {
            var em = process.GetOrCreateDataItem(() => new ExceptionManager(process));

            em.AddExceptionTrigger(process, sourceId, trigger);
        }
Example #10
0
            public override void Handle(DkmProcess process)
            {
                var exceptionHelper = process.GetOrCreateDataItem(() => new ExceptionManagerLocalHelper(process));

                exceptionHelper.MonitorExceptions = MonitorExceptions;
            }
Example #11
0
        public static PyBoolObject33 Create(DkmProcess process, bool value)
        {
            var values = process.GetOrCreateDataItem(() => new ValuesHolder(process));

            return(value ? values.True : values.False);
        }