Esempio n. 1
0
        private SortedList <Address, List <UserRegisterValue> > LoadRegisterValues(
            RegisterValue_v2[] sRegValues)
        {
            var allLists = new SortedList <Address, List <UserRegisterValue> >();

            foreach (var sRegValue in sRegValues)
            {
                Address addr;
                if (sRegValue != null && platform.TryParseAddress(sRegValue.Address, out addr))
                {
                    List <UserRegisterValue> list;
                    if (!allLists.TryGetValue(addr, out list))
                    {
                        list = new List <UserRegisterValue>();
                        allLists.Add(addr, list);
                    }
                    var reg = platform.Architecture.GetRegister(sRegValue.Register);
                    var c   = Constant.Create(reg.DataType, Convert.ToUInt64(sRegValue.Value, 16));
                    if (reg != null)
                    {
                        list.Add(new UserRegisterValue
                        {
                            Register = reg,
                            Value    = c
                        });
                    }
                }
            }
            return(allLists);
        }
Esempio n. 2
0
 private ImageMapVectorTable LoadJumpTable_v4(JumpTable_v4 sTable)
 {
     if (platform == null || !platform.TryParseAddress(sTable.TableAddress, out Address addr))
         return null;
     var listAddrDst = new List<Address>();
     if (sTable.Destinations != null)
     {
         foreach (var item in sTable.Destinations)
         {
             if (!platform.TryParseAddress(item, out Address addrDst))
                 break;
             listAddrDst.Add(addrDst);
         }
     }
     return new ImageMapVectorTable(addr, listAddrDst.ToArray(), 0);
 }
Esempio n. 3
0
        public static ImageSegment?LoadSegment(MemorySegment_v1 segment, IPlatform platform, DecompilerEventListener listener)
        {
            if (segment.Name is null)
            {
                listener.Warn("Memory map segments must have names.");
                return(null);
            }

            if (!platform.TryParseAddress(segment.Address, out var addr))
            {
                listener.Warn(
                    "Unable to parse address '{0}' in memory map segment {1}.",
                    segment.Address !,
                    segment.Name !);
                return(null);
            }
            if (!uint.TryParse(segment.Size, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var size))
            {
                listener.Warn(
                    "Unable to parse hexadecimal size '{0}' in memory map segment {1}.",
                    segment.Size !,
                    segment.Name !);
                return(null);
            }

            var mem = new ByteMemoryArea(addr, new byte[size]);

            return(new ImageSegment(segment.Name, mem, ConvertAccess(segment.Attributes)));
        }
Esempio n. 4
0
        public static ImageSegment LoadSegment(MemorySegment_v1 segment, IPlatform platform, IDiagnosticsService diagSvc)
        {
            Address addr;

            if (!platform.TryParseAddress(segment.Address, out addr))
            {
                diagSvc.Warn(
                    string.Format(
                        "Unable to parse address '{0}' in memory map segment {1}.",
                        segment.Address,
                        segment.Name));
                return(null);
            }
            uint size;

            if (!uint.TryParse(segment.Size, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out size))
            {
                diagSvc.Warn(
                    string.Format(
                        "Unable to parse hexadecimal size '{0}' in memory map segment {1}.",
                        segment.Size,
                        segment.Name));
                return(null);
            }
            return(new ImageSegment(segment.Name, addr, size, ConvertAccess(segment.Attributes)));
        }
        public void LoadProcedure(Procedure_v1 sp)
        {
            try
            {
                if (sp.Name is null)
                {
                    return;
                }
                if (sp.Characteristics != null)
                {
                    library.Characteristics[sp.Name] = sp.Characteristics;
                }
                var sser      = new ProcedureSerializer(platform, this, this.defaultConvention ?? "");
                var signature = sser.Deserialize(sp.Signature, platform.Architecture.CreateFrame());
                if (signature is null)
                {
                    return;
                }
                library.Signatures[sp.Name] = signature;
                if (platform.TryParseAddress(sp.Address, out var addr))
                {
                    this.library.Procedures[addr] = (sp.Name, signature);
                }
                else
                {
                    var mod = EnsureModule(this.moduleName, this.library);
                    var svc = new SystemService
                    {
                        ModuleName = mod.ModuleName,
                        Name       = sp.Name,
                        Signature  = signature,
                    };
                    mod.ServicesByName[sp.Name] = svc;    //$BUGBUG: catch dupes?

                    if (sp.Ordinal != Procedure_v1.NoOrdinal)
                    {
                        mod.ServicesByOrdinal[sp.Ordinal] = svc;
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.Print("An error occurred when loading the signature of procedure {0}.", sp.Name);
                throw new ApplicationException(
                          string.Format("An error occurred when loading the signature of procedure {0}.", sp.Name),
                          ex);
            }
        }
Esempio n. 6
0
        private SortedList <Address, List <RegisterValue_v2> > LoadRegisterValues(
            RegisterValue_v2[] sRegValues)
        {
            var allLists = new SortedList <Address, List <RegisterValue_v2> >();

            foreach (var sRegValue in sRegValues)
            {
                Address addr;
                if (sRegValue != null && platform.TryParseAddress(sRegValue.Address, out addr))
                {
                    List <RegisterValue_v2> list;
                    if (!allLists.TryGetValue(addr, out list))
                    {
                        list = new List <RegisterValue_v2>();
                        allLists.Add(addr, list);
                    }
                    list.Add(sRegValue);
                }
            }
            return(allLists);
        }
Esempio n. 7
0
 public static ImageSegment LoadSegment(MemorySegment_v1 segment, IPlatform platform, IDiagnosticsService diagSvc)
 {
     Address addr;
     if (!platform.TryParseAddress(segment.Address, out addr))
     {
         diagSvc.Warn(
             "Unable to parse address '{0}' in memory map segment {1}.",
             segment.Address,
             segment.Name);
         return null;
     }
     uint size;
     if (!uint.TryParse(segment.Size, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out size))
     {
         diagSvc.Warn(
             "Unable to parse hexadecimal size '{0}' in memory map segment {1}.",
             segment.Size,
             segment.Name);
         return null;
     }
     return new ImageSegment(segment.Name, addr, size, ConvertAccess(segment.Attributes));
 }
Esempio n. 8
0
        public static ImageSegment LoadSegment(MemorySegment_v1 segment, IPlatform platform, IDiagnosticsService diagSvc)
        {
            if (!platform.TryParseAddress(segment.Address, out var addr))
            {
                diagSvc.Warn(
                    "Unable to parse address '{0}' in memory map segment {1}.",
                    segment.Address,
                    segment.Name);
                return(null);
            }
            if (!uint.TryParse(segment.Size, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var size))
            {
                diagSvc.Warn(
                    "Unable to parse hexadecimal size '{0}' in memory map segment {1}.",
                    segment.Size,
                    segment.Name);
                return(null);
            }

            var mem = new MemoryArea(addr, new byte[size]);

            return(new ImageSegment(segment.Name, mem, ConvertAccess(segment.Attributes)));
        }