Пример #1
0
 public ASymbolLoaderThread()
 {
     SymbolList        = new UArrayManager <ASymbol>();
     Process           = null;
     IsLoading         = false;
     CurrentModuleName = "";
     Terminated        = false;
 }
Пример #2
0
 public ARefStringArray AllSymbols; //filled at the end with all known symbols (allocs, labels, kallocs, aobscan results, defines that are addresses, etc...)
 #endregion
 #region Constructor
 public ADisableInfo()
 {
     Allocs                = new AAllocArray();
     RegisteredSymbols     = new AStringArray();
     Exceptions            = new UArrayManager <Exception>();
     CCodeSymbols          = new ASymbolHandler();
     DoNotFreeCCodeSymbols = false;
     AllSymbols            = new ARefStringArray();
 }
Пример #3
0
        public UIntPtr GetAddressFromPointer(String s, out Boolean error)
        {
            error = true;
            var offsets = new UArrayManager <Int32>();
            var list    = new AStringArray();

            if (!ParseAsPointer(s, list))
            {
                return(UIntPtr.Zero);
            }
            UIntPtr baseAddress;

            try
            {
                baseAddress = GetAddressFromName(list[0]);
            }
            catch
            {
                return(UIntPtr.Zero);
            }
            offsets.SetLength(list.Length - 1);
            for (var i = 1; i < list.Length; i++) //start from the first offset
            {
                var off = AStringUtils.Copy(list[i], 1, list[i].Length);
                try
                {
                    offsets[i - 1] = (int)AStringUtils.StrToQWordEx("0x" + off);
                }
                catch
                {
                    return(UIntPtr.Zero);
                }
                if (list[i][0] == '-')
                {
                    offsets[i - 1] = -offsets[i - 1];
                }
            }
            //still here so notation was correct and baseAddress+offsets are filled in
            //now read
            var realAddress2 = baseAddress;

            for (var i = 0; i < offsets.Length; i++)
            {
                var realAddress = Process.Memory.Read <UIntPtr>(realAddress2.ToIntPtr());
                if (realAddress != UIntPtr.Zero)
                {
                    realAddress2 = realAddress + offsets[i];
                }
                else
                {
                    return(UIntPtr.Zero);
                }
            }
            error = false;
            return(realAddress2);
        }
Пример #4
0
 public ASymbolHandler()
 {
     Process             = null;
     _symbolLoaderThread = null;
     SymbolList          = new UArrayManager <ASymbol>();
     UserDefinedSymbols  = new UArrayManager <AUserDefinedSymbol>();
     _moduleList         = new AModuleInfoArray();
     ShowSymbols         = false;
     ShowModules         = false;
     ShowSections        = false;
 }