Пример #1
0
        DebugTarget GetCurrentTargetInternal()
        {
            uint id;
            int  hr = SystemObjects.GetCurrentProcessId(out id);

            return(hr < 0 ? null : _targets.FirstOrDefault(t => t.Index == id));
        }
        int IDebugEventCallbacksWide.CreateThread(ulong Handle, ulong DataOffset, ulong StartOffset)
        {
            uint id, tid, pindex, pid;

            SystemObjects.GetCurrentProcessId(out pindex);
            SystemObjects.GetCurrentThreadId(out id);
            SystemObjects.GetCurrentProcessSystemId(out pid);
            SystemObjects.GetCurrentThreadSystemId(out tid);
            Debug.Assert(tid > 0 && pid > 0);

            var process = _processes.First(p => p.PID == pid);

            var thread = new TargetThread(process)
            {
                Index        = id,
                TID          = tid,
                StartAddress = StartOffset,
                Teb          = DataOffset,
                Handle       = Handle,
                ProcessIndex = pindex
            };

            process.AddThread(thread);

            OnThreadCreated(new ThreadCreatedEventArgs(thread, process));

            return((int)DEBUG_STATUS.NO_CHANGE);
        }
Пример #3
0
        internal int GetCurrentThreadInternal()
        {
            uint id;

            SystemObjects.GetCurrentThreadId(out id);
            return((int)id);
        }
        int IDebugEventCallbacksWide.LoadModule(ulong ImageFileHandle, ulong BaseOffset, uint ModuleSize, string ModuleName, string ImageName, uint CheckSum, uint TimeDateStamp)
        {
            uint id, pid;

            SystemObjects.GetCurrentProcessId(out id);
            SystemObjects.GetCurrentProcessSystemId(out pid);

            var module = new TargetModule(Processes.First(p => p.PID == pid))
            {
                ImageName    = ImageName,
                Name         = ModuleName,
                BaseAddress  = BaseOffset,
                Size         = ModuleSize,
                TimeStamp    = TimeDateStamp,
                Handle       = ImageFileHandle,
                ProcessIndex = id,
                PID          = pid
            };

            var process = _processes.First(p => p.PID == pid);

            process.AddModule(module);

            OnModuleLoaded(new ModuleEventArgs(process, module));

            return((int)DEBUG_STATUS.NO_CHANGE);
        }
Пример #5
0
 public TargetProcess GetCurrentProcess()
 {
     return(RunAsync(() => {
         uint id;
         SystemObjects.GetCurrentProcessSystemId(out id);
         return _processes.First(p => p.PID == id);
     }).Result);
 }
Пример #6
0
        //private DebugTarget GetTarget(int i) {
        //	if (SystemObjects.SetCurrentProcessId((uint)i) < 0)
        //		return null;

        //	DEBUG_CLASS debugClass;
        //	DEBUG_CLASS_QUALIFIER qualifier;
        //	Control.GetDebuggeeType(out debugClass, out qualifier);
        //	switch (debugClass) {
        //		case DEBUG_CLASS.IMAGE_FILE:
        //			break;
        //	}
        //	return null;
        //}

        //public Task SetCurrentTarget(DebugTarget target) {
        //	return RunAsync(() => {
        //		var id = _targets.IndexOf(target);
        //		if (id < 0)
        //			return;

        //		uint currentId;
        //		SystemObjects.GetCurrentProcessId(out currentId);
        //		if (currentId != id) {
        //			SystemObjects.SetCurrentProcessId((uint)id);
        //			Control.OutputPromptWide(DEBUG_OUTCTL.THIS_CLIENT, null);
        //		}
        //	});
        //}

        public Task <int> SetCurrentThreadIndex(int index)
        {
            return(RunAsync(() => {
                uint id;
                SystemObjects.GetCurrentThreadId(out id).ThrowIfFailed();
                SystemObjects.SetCurrentThreadId((uint)index).ThrowIfFailed();
                return (int)id;
            }));
        }
Пример #7
0
        ulong GetThreadTeb(uint index)
        {
            uint  id;
            ulong teb;

            SystemObjects.GetCurrentThreadId(out id).ThrowIfFailed();
            SystemObjects.SetCurrentThreadId(index).ThrowIfFailed();
            SystemObjects.GetCurrentThreadTeb(out teb);
            return(teb);
        }
        int IDebugEventCallbacksWide.CreateProcess(ulong ImageFileHandle, ulong Handle, ulong BaseOffset, uint ModuleSize, string ModuleName, string ImageName,
                                                   uint CheckSum, uint TimeDateStamp, ulong InitialThreadHandle, ulong ThreadDataOffset, ulong StartOffset)
        {
            Debug.WriteLine("IDebugEventCallbacksWide.CreateProcess");

            uint id;

            SystemObjects.GetCurrentProcessId(out id);
            ulong peb;

            SystemObjects.GetCurrentProcessPeb(out peb);
            uint pid;

            SystemObjects.GetCurrentProcessSystemId(out pid);

            var process = new TargetProcess {
                PID        = pid,
                hProcess   = Handle,
                hFile      = ImageFileHandle,
                BaseOffset = BaseOffset,
                ModuleSize = ModuleSize,
                ImageName  = ImageName,
                TimeStamp  = DateTime.FromFileTime(TimeDateStamp),
                ModuleName = ModuleName,
                Index      = (int)id,
                Peb        = peb
            };

            _processes.Add(process);

            OnProcessCreated(process);

            uint tindex, tid;

            SystemObjects.GetCurrentThreadId(out tindex);
            SystemObjects.GetCurrentThreadSystemId(out tid);
            var thread = new TargetThread(process)
            {
                Index        = tindex,
                TID          = tid,
                StartAddress = StartOffset,
                Teb          = ThreadDataOffset,
                Handle       = InitialThreadHandle,
                ProcessIndex = id
            };

            process.AddThread(thread);

            OnThreadCreated(new ThreadCreatedEventArgs(thread, process));

            return((int)DEBUG_STATUS.NO_CHANGE);
        }
Пример #9
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="Provider"></param>
 /// <param name="Root"></param>
 protected virtual void OnSystemProvided(ISystemProvider Provider, string Root)
 {
     SystemObjects.Clear();
     if (Provider != null)
     {
         foreach (var i in Provider.Query(Root))
         {
             SystemObjects.Add(new CheckableSystemObject(i, SystemProvider)
             {
                 QueryOnExpanded = QueryOnExpanded
             });
         }
     }
 }
Пример #10
0
        int IDebugEventCallbacksWide.UnloadModule(string ImageBaseName, ulong BaseOffset)
        {
            uint id, pid;

            SystemObjects.GetCurrentProcessId(out id);
            SystemObjects.GetCurrentProcessSystemId(out pid);

            var process = _processes.First(p => p.PID == pid);
            var module  = process.Modules.First(m => m.BaseAddress == BaseOffset);

            process.RemoveModule(module);
            OnModuleUnloaded(new ModuleEventArgs(process, module));

            return((int)DEBUG_STATUS.NO_CHANGE);
        }
Пример #11
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="Provider"></param>
 /// <param name="Root"></param>
 protected virtual void OnRefreshed(ISystemObjectProvider Provider, string Root)
 {
     SystemObjects.Clear();
     if (Provider != null)
     {
         foreach (var i in Provider.Query(Root))
         {
             var j = new CheckableStorageObject(i, SystemObjectProvider)
             {
                 QueryOnExpanded = QueryOnExpanded
             };
             SystemObjects.Add(j);
         }
     }
 }
Пример #12
0
        int IDebugEventCallbacksWide.ExitProcess(uint ExitCode)
        {
            Debug.WriteLine("IDebugEventCallbacksWide.ExitProcess");

            uint pid;

            SystemObjects.GetCurrentProcessSystemId(out pid);
            var process = _processes.First(p => p.PID == pid);

            process.ExitCode = ExitCode;

            OnProcessExited(new ProcessExitedEventArgs(process));

            UpdateStatus();
            return((int)DEBUG_STATUS.NO_CHANGE);
        }
Пример #13
0
        public Task <IList <DebugTarget> > GetTargets()
        {
            return(RunAsync(() => {
                uint processes;
                SystemObjects.GetNumberProcesses(out processes).ThrowIfFailed();

                uint[] ids = new uint[processes];
                uint[] pids = new uint[processes];

                SystemObjects.GetProcessIdsByIndex(0, processes, ids, pids);
                uint current;
                SystemObjects.GetCurrentProcessId(out current);
                var targets = (IList <DebugTarget>)Enumerable.Range(0, (int)processes).Select(i => GetTarget(i)).ToList();
                SystemObjects.SetCurrentProcessId(current);
                return targets;
            }));
        }
Пример #14
0
        public Task SetCurrentTarget(DebugTarget target)
        {
            return(RunAsync(() => {
                var id = _targets.IndexOf(target);
                if (id < 0)
                {
                    return;
                }

                uint currentId;
                SystemObjects.GetCurrentProcessId(out currentId);
                if (currentId != id)
                {
                    SystemObjects.SetCurrentProcessId((uint)id);
                    Control.OutputPromptWide(DEBUG_OUTCTL.THIS_CLIENT, null);
                }
            }));
        }
Пример #15
0
        private DebugTarget GetTarget(int i)
        {
            if (SystemObjects.SetCurrentProcessId((uint)i) < 0)
            {
                return(null);
            }

            DEBUG_CLASS           debugClass;
            DEBUG_CLASS_QUALIFIER qualifier;

            Control.GetDebuggeeType(out debugClass, out qualifier);
            switch (debugClass)
            {
            case DEBUG_CLASS.IMAGE_FILE:
                break;
            }
            return(null);
        }
Пример #16
0
        int IDebugEventCallbacksWide.ExitThread(uint ExitCode)
        {
            uint id, pindex, tid, pid;

            SystemObjects.GetCurrentThreadId(out id);
            SystemObjects.GetCurrentProcessId(out pindex);
            SystemObjects.GetCurrentProcessSystemId(out pid);
            SystemObjects.GetCurrentThreadSystemId(out tid);

            var process = _processes.First(p => p.PID == pid);
            var thread  = process.Threads.First(t => t.TID == tid);

            thread.ExitCode = ExitCode;

            process.RemoveThread(thread);

            OnThreadExited(new ThreadExitedEventArgs(thread, process));

            return((int)DEBUG_STATUS.NO_CHANGE);
        }
Пример #17
0
 public static AccessPrivilege GetPrivilege(this User user, SystemObjects obj)
 {
     return user.Privileges.SingleOrDefault (x => x.Object == obj) ?? new AccessPrivilege ();
 }
Пример #18
0
 public static AccessPrivilege GetPrivilege(this User user, SystemObjects obj)
 {
     return(user.Privileges.SingleOrDefault(x => x.Object == obj) ?? new AccessPrivilege());
 }
Пример #19
0
 public static extern int GetScrollBarInfo(IntPtr hWnd, SystemObjects id, ref SCROLLBARINFO sbi);
Пример #20
0
 /// <summary>
 ///     Switches to a thread
 /// </summary>
 /// <param name="threadId">The thread identifier.</param>
 public void SwitchToThread(int threadId)
 {
     SystemObjects.SetCurrentThreadId(threadId.ToUInt()); // todo: what about bad thread id?
 }