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); }
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); }
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))); }
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); } }
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); }
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)); }
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))); }