Ejemplo n.º 1
0
 public static Address GetRawBinaryEntryAddress(
     RawFileDefinition rawFile,
     byte[] image,
     IProcessorArchitecture arch,
     Address baseAddr)
 {
     if (!string.IsNullOrEmpty(rawFile.EntryPoint.Address))
     {
         if (arch.TryParseAddress(rawFile.EntryPoint.Address, out Address entryAddr))
         {
             if (rawFile.EntryPoint.Follow)
             {
                 var rdr  = arch.CreateImageReader(new MemoryArea(baseAddr, image), entryAddr);
                 var addr = arch.ReadCodeAddress(0, rdr, arch.CreateProcessorState());
                 return(addr);
             }
             else
             {
                 return(entryAddr);
             }
         }
         else
         {
             return(baseAddr);
         }
     }
     return(baseAddr);
 }
Ejemplo n.º 2
0
        private Expression ReadSegmentedValue(DataType dt, Constant seg, Expression eOff)
        {
            var off = eOff as Constant;

            if (eOff != null)
            {
                var addr = arch.MakeSegmentedAddress(seg, off);
                if (!segmentMap.TryFindSegment(addr, out ImageSegment segment))
                {
                    return(Constant.Invalid);
                }
                var rdr = arch.CreateImageReader(segment.MemoryArea, addr);
                memAccesses[addr] = dt;
                if (dt == PrimitiveType.SegPtr32)
                {
                    var addrRead = arch.ReadCodeAddress(dt.Size, rdr, null);
                    if (addrRead != null)
                    {
                        return(addrRead);
                    }
                    else
                    {
                        //$REVIEW we want a warning here. OR the caller.
                        return(Constant.Invalid);
                    }
                }
                else
                {
                    return(rdr.Read((PrimitiveType)dt));
                }
            }
            throw new NotImplementedException();
        }