public override IEnumerable<Address> CreatePointerScanner(ImageMap map, ImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags)
 {
     var knownLinAddresses = knownAddresses.Select(a => a.ToUInt32()).ToHashSet();
     if (flags != PointerScannerFlags.Calls)
         throw new NotImplementedException(string.Format("Haven't implemented support for scanning for {0} yet.", flags));
     while (rdr.IsValid)
     {
         uint linAddrCall =  rdr.Address.ToUInt32();
         var opcode = rdr.ReadLeUInt32();
         if ((opcode & 0x0F000000) == 0x0B000000)         // BL
         {
             int offset = ((int)opcode << 8) >> 6;
             uint target = (uint)(linAddrCall + 8 + offset);
             if (knownLinAddresses.Contains(target))
                 yield return Address.Ptr32(linAddrCall);
         }
     }
 }
 public override IEnumerable<Address> CreatePointerScanner(SegmentMap map, ImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags)
 {
     var knownLinAddresses = knownAddresses.Select(a => (uint)a.ToLinear()).ToHashSet();
     return new MipsPointerScanner32(rdr, knownLinAddresses, flags).Select(l => Address.Ptr32(l));
 }
Beispiel #3
0
 public override IEnumerable<Address> CreateInstructionScanner(SegmentMap map, ImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags)
 {
     var knownLinAddresses = knownAddresses.Select(a => a.ToUInt32()).ToHashSet();
     return new X86RealModePointerScanner(rdr, knownLinAddresses, flags).Select(li => map.MapLinearAddressToAddress(li));
 }
Beispiel #4
0
 public override IEnumerable<Address> CreatePointerScanner(ImageMap map, ImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags)
 {
     var knownLinAddresses = knownAddresses.Select(a => a.ToUInt32()).ToHashSet();
     return new M68kPointerScanner(rdr, knownLinAddresses, flags).Select(li => Address.Ptr32(li));
 }
 public virtual IEnumerable<Address> CreatePointerScanner(ImageMap map, ImageReader rdr, IEnumerable<Address> knownLinAddresses, PointerScannerFlags flags)
 {
     return mode.CreateInstructionScanner(map, rdr, knownLinAddresses, flags);
 }
Beispiel #6
0
 public M68kPointerScanner(EndianImageReader rdr, HashSet <uint> knownLinAddresses, PointerScannerFlags flags)
     : base(rdr, knownLinAddresses, flags)
 {
 }
Beispiel #7
0
        public override IEnumerable <Address> CreatePointerScanner(ImageMap map, ImageReader rdr, IEnumerable <Address> knownAddresses, PointerScannerFlags flags)
        {
            var knownLinAddresses = knownAddresses.Select(a => a.ToUInt32()).ToHashSet();

            return(new M68kPointerScanner(rdr, knownLinAddresses, flags).Select(li => Address.Ptr32(li)));
        }
Beispiel #8
0
 public override IEnumerable<Address> CreatePointerScanner(
     SegmentMap map,
     ImageReader rdr,
     IEnumerable<Address> knownAddresses,
     PointerScannerFlags flags)
 {
     var knownLinAddresses = knownAddresses
         .Select(a => a.ToLinear())
         .ToHashSet();
     return new PowerPcPointerScanner64(rdr, knownLinAddresses, flags)
         .Select(u => Address.Ptr64(u));
 }
Beispiel #9
0
 public PICPointerScanner(EndianImageReader rd, HashSet <uint> knownLinAddrs, PointerScannerFlags flags)
     : base(rd, knownLinAddrs, flags)
 {
 }
Beispiel #10
0
 public override IEnumerable<Address> CreatePointerScanner(SegmentMap map, EndianImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags)
 {
     return new Arm32PointerScanner(rdr, knownAddresses.Select(a => a.ToUInt32()).ToHashSet(), flags)
         .Select(lin => Address.Ptr32(lin));
 }
Beispiel #11
0
 public IEnumerable <Address> CreatePointerScanner(SegmentMap map, ImageReader rdr, IEnumerable <Address> knownLinAddrs, PointerScannerFlags flags)
 {
     throw new NotImplementedException();
 }
Beispiel #12
0
 public abstract IEnumerable <Address> CreatePointerScanner(ImageMap map, ImageReader rdr, IEnumerable <Address> knownAddresses, PointerScannerFlags flags);
Beispiel #13
0
 public PowerPcPointerScanner64(EndianImageReader rdr, HashSet <ulong> knownLinAddresses, PointerScannerFlags flags)
     : base(rdr, knownLinAddresses, flags)
 {
 }
Beispiel #14
0
 public Z80PointerScanner(SegmentMap map, EndianImageReader rdr, HashSet <ushort> knownLinAddresses, PointerScannerFlags flags)
     : base(rdr, knownLinAddresses, flags)
 {
     this.map = map;
     this.rdr = rdr;
     this.knownLinAddresses = knownLinAddresses;
     this.flags             = flags;
 }
Beispiel #15
0
 public override PICPointerScanner CreatePointerScanner(EndianImageReader rdr, HashSet <uint> knownLinAddresses, PointerScannerFlags flags)
 => new PIC18PointerScanner(rdr, knownLinAddresses, flags);
Beispiel #16
0
 public IEnumerable<Address> CreatePointerScanner(
     ImageMap imageMap,
     ImageReader rdr,
     IEnumerable<Address> address,
     PointerScannerFlags pointerScannerFlags)
 {
     return Architecture.CreatePointerScanner(imageMap, rdr, address, pointerScannerFlags);
 }
Beispiel #17
0
 public abstract IEnumerable<Address> CreateInstructionScanner(ImageMap map, ImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags);
Beispiel #18
0
 public PointerScanner(EndianImageReader rdr, HashSet <T> knownLinAddresses, PointerScannerFlags flags)
 {
     this.rdr = rdr;
     this.knownLinAddresses = knownLinAddresses;
     this.flags             = flags;
 }
 public virtual IEnumerable <Address> CreatePointerScanner(ImageMap map, ImageReader rdr, IEnumerable <Address> knownLinAddresses, PointerScannerFlags flags)
 {
     return(mode.CreateInstructionScanner(map, rdr, knownLinAddresses, flags));
 }
Beispiel #20
0
 /// <summary>
 /// Creates the PIC memory pointer scanner.
 /// </summary>
 /// <param name="rdr">The memory image reader.</param>
 /// <param name="knownLinAddresses">The known linear addresses.</param>
 /// <param name="flags">The flags.</param>
 /// <returns>
 /// The new pointer scanner.
 /// </returns>
 public abstract PICPointerScanner CreatePointerScanner(EndianImageReader rdr, HashSet <uint> knownLinAddresses, PointerScannerFlags flags);
Beispiel #21
0
 public override IEnumerable <Address> CreatePointerScanner(SegmentMap map, EndianImageReader rdr, IEnumerable <Address> knownAddresses, PointerScannerFlags flags)
 {
     throw new NotImplementedException();
 }
Beispiel #22
0
 public override IEnumerable<Address> CreatePointerScanner(SegmentMap map, EndianImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags)
 {
     var knownLinAddresses = knownAddresses.Select(a => a.ToUInt32()).ToHashSet();
     if (flags != PointerScannerFlags.Calls)
         throw new NotImplementedException(string.Format("Haven't implemented support for scanning for {0} yet.", flags));
     while (rdr.IsValid)
     {
         uint linAddrCall =  rdr.Address.ToUInt32();
         var opcode = rdr.ReadLeUInt32();
         if ((opcode & 0x0F000000) == 0x0B000000)         // BL
         {
             int offset = ((int)opcode << 8) >> 6;
             uint target = (uint)(linAddrCall + 8 + offset);
             if (knownLinAddresses.Contains(target))
                 yield return Address.Ptr32(linAddrCall);
         }
     }
 }
Beispiel #23
0
        public override IEnumerable <Address> CreateInstructionScanner(SegmentMap map, EndianImageReader rdr, IEnumerable <Address> knownAddresses, PointerScannerFlags flags)
        {
            var knownLinAddresses = knownAddresses.Select(a => a.ToUInt32()).ToHashSet();

            return(new X86RealModePointerScanner(rdr, knownLinAddresses, flags).Select(li => map.MapLinearAddressToAddress(li)));
        }
Beispiel #24
0
        public override IEnumerable <Address> CreatePointerScanner(SegmentMap map, EndianImageReader rdr, IEnumerable <Address> knownAddresses, PointerScannerFlags flags)
        {
            var knownLinAddresses = knownAddresses.Select(a => a.ToUInt16()).ToHashSet();

            return(new Z80PointerScanner(map, rdr, knownLinAddresses, flags).Select(li => Address.Ptr16(li)));
        }
Beispiel #25
0
 public abstract IEnumerable<Address> CreatePointerScanner(SegmentMap map, ImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags);
Beispiel #26
0
        public override IEnumerable <Address> CreateInstructionScanner(ImageMap map, ImageReader rdr, IEnumerable <Address> knownAddresses, PointerScannerFlags flags)
        {
            var knownLinAddresses = knownAddresses.Select(a => (ulong)a.ToLinear()).ToHashSet();

            return(new X86PointerScanner64(rdr, knownLinAddresses, flags).Select(li => map.MapLinearAddressToAddress(li)));
        }
Beispiel #27
0
 public override IEnumerable <Address> CreatePointerScanner(SegmentMap map, EndianImageReader rdr, IEnumerable <Address> knownAddresses, PointerScannerFlags flags)
 {
     return(mode.CreateInstructionScanner(map, rdr, knownAddresses, flags));
 }
Beispiel #28
0
 public override abstract IEnumerable <Address> CreatePointerScanner(
     SegmentMap map,
     EndianImageReader rdr,
     IEnumerable <Address> addrs,
     PointerScannerFlags flags);
Beispiel #29
0
 public abstract IEnumerable<Address> CreatePointerScanner(
     ImageMap map, 
     ImageReader rdr,
     IEnumerable<Address> addrs, 
     PointerScannerFlags flags);
        public override IEnumerable <Address> CreatePointerScanner(SegmentMap map, EndianImageReader rdr, IEnumerable <Address> knownAddresses, PointerScannerFlags flags)
        {
            var knownLinAddresses = knownAddresses.Select(a => (uint)a.ToLinear()).ToHashSet();

            return(new MipsPointerScanner32(rdr, knownLinAddresses, flags).Select(l => Address.Ptr32(l)));
        }
Beispiel #31
0
 public IEnumerable<Address> CreatePointerScanner(ImageMap map, ImageReader rdr, IEnumerable<Address> knownLinAddrs, PointerScannerFlags flags)
 {
     throw new NotImplementedException();
 }
Beispiel #32
0
 public abstract IEnumerable <Address> CreateInstructionScanner(SegmentMap map, EndianImageReader rdr, IEnumerable <Address> knownAddresses, PointerScannerFlags flags);
Beispiel #33
0
 public override IEnumerable<Address> CreateInstructionScanner(ImageMap map, ImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags)
 {
     var knownLinAddresses = knownAddresses.Select(a => (ulong)a.ToLinear()).ToHashSet();
     return new X86PointerScanner64(rdr, knownLinAddresses, flags).Select(li => map.MapLinearAddressToAddress(li));
 }
Beispiel #34
0
 public X86PointerScanner32(ImageReader rdr, HashSet <uint> knownLinAddresses, PointerScannerFlags flags) : base(rdr, knownLinAddresses, flags)
 {
 }
Beispiel #35
0
 public override abstract IEnumerable<Address> CreatePointerScanner(
     SegmentMap map, 
     ImageReader rdr,
     IEnumerable<Address> addrs, 
     PointerScannerFlags flags);
Beispiel #36
0
 public override IEnumerable<Address> CreatePointerScanner(SegmentMap map, ImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags)
 {
     return mode.CreateInstructionScanner(map, rdr, knownAddresses, flags);
 }
Beispiel #37
0
 public override IEnumerable<Address> CreatePointerScanner(SegmentMap map, ImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags)
 {
     throw new NotImplementedException();
 }
Beispiel #38
0
 public PowerPcPointerScanner(ImageReader rdr, HashSet <T> knownLinAddresses, PointerScannerFlags flags)
     : base(rdr, knownLinAddresses, flags)
 {
 }