本文整理汇总了C#中Reko.Core.ImageReader类的典型用法代码示例。如果您正苦于以下问题:C# ImageReader类的具体用法?C# ImageReader怎么用?C# ImageReader使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
ImageReader类属于Reko.Core命名空间,在下文中一共展示了ImageReader类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: GetTrampolineDestination
public override ProcedureBase GetTrampolineDestination(ImageReader rdr, IRewriterHost host)
{
var rw = Architecture.CreateRewriter(
rdr,
Architecture.CreateProcessorState(),
Architecture.CreateFrame(), host);
var rtlc = rw.FirstOrDefault();
if (rtlc == null || rtlc.Instructions.Count == 0)
return null;
var jump = rtlc.Instructions[0] as RtlGoto;
if (jump == null)
return null;
var pc = jump.Target as ProcedureConstant;
if (pc != null)
return pc.Procedure;
var access = jump.Target as MemoryAccess;
if (access == null)
return null;
var addrTarget = access.EffectiveAddress as Address;
if (addrTarget == null)
{
var wAddr = access.EffectiveAddress as Constant;
if (wAddr == null)
{
return null;
}
addrTarget = MakeAddressFromConstant(wAddr);
}
ProcedureBase proc = host.GetImportedProcedure(addrTarget, rtlc.Address);
if (proc != null)
return proc;
return host.GetInterceptedCall(addrTarget);
}
开发者ID:melbcat,项目名称:reko,代码行数:33,代码来源:Win_x86_64_Platform.cs
示例2: GlobalDataWorkItem
public GlobalDataWorkItem(IScanner scanner, Program program, Address addr, DataType dt) : base(addr)
{
this.scanner = scanner;
this.program = program;
this.dt = dt;
this.rdr = program.CreateImageReader(addr);
}
开发者ID:relaxar,项目名称:reko,代码行数:7,代码来源:GlobalDataWorkItem.cs
示例3: ReadLanguageDirectory
public List<ProgramResource> ReadLanguageDirectory(ImageReader rdr, uint resourceType, string resourceId)
{
const uint DIR_MASK = 0x80000000;
var flags = rdr.ReadUInt32();
var date = rdr.ReadUInt32();
var version = rdr.ReadUInt32();
var cNameEntries = rdr.ReadUInt16();
var cIdEntries = rdr.ReadUInt16();
var entries = new List<ProgramResource>();
for (int i = 0; i < cNameEntries; ++i)
{
var rvaName = rdr.ReadUInt32();
var rvaEntry = rdr.ReadUInt32();
var subRdr = new LeImageReader(imgLoaded, rvaResources + (rvaEntry & ~DIR_MASK));
if ((rvaEntry & DIR_MASK) != 0)
throw new BadImageFormatException();
entries.Add(ReadResourceEntry(subRdr, resourceId, ReadResourceString(rvaName), resourceType));
}
for (int i = 0; i < cIdEntries; ++i)
{
var id = rdr.ReadUInt32();
var rvaEntry = rdr.ReadUInt32();
var subRdr = new LeImageReader(imgLoaded, rvaResources + (rvaEntry & ~DIR_MASK));
if ((rvaEntry & DIR_MASK) != 0)
throw new BadImageFormatException();
entries.Add(ReadResourceEntry(subRdr, resourceId, id.ToString(), resourceType));
}
return entries;
}
开发者ID:feelworld,项目名称:reko,代码行数:29,代码来源:PeResourceLoader.cs
示例4: ApplyRelocation
public override void ApplyRelocation(Address baseOfImage, uint page, ImageReader rdr, RelocationDictionary relocations)
{
ushort fixup = rdr.ReadLeUInt16();
Address offset = baseOfImage + page + (fixup & 0x0FFFu);
var imgR = program.CreateImageReader(offset);
var imgW = program.CreateImageWriter(offset);
switch (fixup >> 12)
{
case RelocationAbsolute:
// Used for padding to 4-byte boundary, ignore.
break;
case RelocationHighLow:
{
uint n = (uint) (imgR.ReadUInt32() + (baseOfImage - program.ImageMap.BaseAddress));
imgW.WriteUInt32(n);
relocations.AddPointerReference(offset.ToLinear() - imgW.MemoryArea.BaseAddress.ToLinear(), n);
break;
}
case 0xA:
break;
default:
dcSvc.Warn(
dcSvc.CreateAddressNavigator(program, offset),
string.Format(
"Unsupported i386 PE fixup type: {0:X}",
fixup >> 12));
break;
}
}
开发者ID:relaxar,项目名称:reko,代码行数:29,代码来源:i386Relocator.cs
示例5: CreateRewriter
public override IEnumerable<RtlInstructionCluster> CreateRewriter(ImageReader rdr, ProcessorState state, Frame frame, IRewriterHost host)
{
return new MipsRewriter(
this,
new MipsDisassembler(this, rdr, IsVersion6OrLater),
frame,
host);
}
开发者ID:uxmal,项目名称:reko,代码行数:8,代码来源:MipsProcessorArchitecture.cs
示例6: CreateDisassembler16
private void CreateDisassembler16(ImageReader rdr)
{
dasm = new X86Disassembler(
rdr,
PrimitiveType.Word16,
PrimitiveType.Word16,
false);
}
开发者ID:gh0std4ncer,项目名称:reko,代码行数:8,代码来源:X86DisassemblerTests.cs
示例7: CreateRewriter
public IEnumerable<RtlInstructionCluster> CreateRewriter(ImageReader rdr, ProcessorState state, Frame frame, IRewriterHost host)
{
var linAddr = rdr.Address.ToLinear();
RtlTrace trace;
if (!rewriters.Traces.TryGetValue(rdr.Address, out trace))
NUnit.Framework.Assert.Fail(string.Format("Unexpected request for a rewriter at address {0}", rdr.Address));
return trace;
}
开发者ID:melbcat,项目名称:reko,代码行数:8,代码来源:FakeArchitecture.cs
示例8: ReadValue
public virtual object ReadValue(System.Reflection.FieldInfo f, ImageReader rdr, ReaderContext ctx)
{
Func<ImageReader, object> fn;
if (readers.TryGetValue(f.FieldType, out fn))
{
return fn(rdr);
}
throw new NotSupportedException(string.Format("Field type {0} not supported.", f.FieldType.FullName));
}
开发者ID:gitter-badger,项目名称:reko,代码行数:9,代码来源:FieldAttribute.cs
示例9: CreateDisassembler
public override IEnumerable<MachineInstruction> CreateDisassembler(ImageReader imageReader)
{
int i = prog.IndexOfKey(imageReader.Address.ToUInt16());
if (i < 0)
yield break;
for (; i < prog.Count; ++i)
{
yield return prog.Values[i];
}
}
开发者ID:feelworld,项目名称:reko,代码行数:10,代码来源:C64Basic.cs
示例10: Load
public static Elf32_Sym Load(ImageReader rdr)
{
var sym = new Elf32_Sym();
sym.st_name = rdr.ReadUInt32();
sym.st_value = rdr.ReadUInt32();
sym.st_size = rdr.ReadUInt32();
sym.st_info = rdr.ReadByte();
sym.st_other = rdr.ReadByte();
sym.st_shndx = rdr.ReadUInt16();
return sym;
}
开发者ID:gitter-badger,项目名称:reko,代码行数:11,代码来源:Elf32_Sym.cs
示例11: Read
public static Elf64_Rela Read(ImageReader rdr)
{
var o = rdr.ReadUInt64();
var i = rdr.ReadUInt64();
var a = rdr.ReadInt64();
return new Elf64_Rela
{
r_offset = o,
r_info = i,
r_addend = a
};
}
开发者ID:relaxar,项目名称:reko,代码行数:12,代码来源:Elf32_Rel.cs
示例12: Read
public void Read(ImageReader rdr)
{
foreach (var f in fields)
{
var attr = GetFieldAttribute(f);
uint alignment = (uint) attr.Align;
rdr.Offset = (rdr.Offset + alignment - 1u) & ~(alignment - 1u);
Debug.Print("At offset: {0:X8} reading field '{1}.{2}' after alignment of {3}.", rdr.Offset, f.DeclaringType.Name, f.Name, alignment);
object value = attr.ReadValue(f, rdr, null);
f.SetValue(structure, value);
}
}
开发者ID:gitter-badger,项目名称:reko,代码行数:13,代码来源:StructureReader.cs
示例13: ReadSegmentedCodeAddress
protected Address ReadSegmentedCodeAddress(int byteSize, ImageReader rdr, ProcessorState state)
{
if (byteSize == PrimitiveType.Word16.Size)
{
return Address.SegPtr(state.GetRegister(Registers.cs).ToUInt16(), rdr.ReadLeUInt16());
}
else
{
ushort off = rdr.ReadLeUInt16();
ushort seg = rdr.ReadLeUInt16();
return Address.SegPtr(seg, off);
}
}
开发者ID:gh0std4ncer,项目名称:reko,代码行数:13,代码来源:ProcessorMode.cs
示例14: Load
public static Elf64_PHdr Load(ImageReader rdr)
{
var hdr = new Elf64_PHdr
{
p_type = (ProgramHeaderType)rdr.ReadUInt32(),
p_flags = rdr.ReadUInt32(),
p_offset = rdr.ReadUInt64(),
p_vaddr = rdr.ReadUInt64(),
p_paddr = rdr.ReadUInt64(),
p_filesz = rdr.ReadUInt64(),
p_pmemsz = rdr.ReadUInt64(),
p_align = rdr.ReadUInt64(),
};
return hdr;
}
开发者ID:gitter-badger,项目名称:reko,代码行数:15,代码来源:Elf32_PHdr.cs
示例15: Load
public static Elf64_SHdr Load(ImageReader rdr)
{
return new Elf64_SHdr
{
sh_name = rdr.ReadUInt32(),
sh_type = (SectionHeaderType)rdr.ReadUInt32(),
sh_flags = rdr.ReadUInt64(),
sh_addr = rdr.ReadUInt64(), // Address
sh_offset = rdr.ReadUInt64(),
sh_size = rdr.ReadUInt64(),
sh_link = rdr.ReadUInt32(),
sh_info = rdr.ReadUInt32(),
sh_addralign = rdr.ReadUInt64(),
sh_entsize = rdr.ReadUInt64(),
};
}
开发者ID:gitter-badger,项目名称:reko,代码行数:16,代码来源:Elf32_SHdr.cs
示例16: CreatePointerScanner
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);
}
}
}
开发者ID:gitter-badger,项目名称:reko,代码行数:18,代码来源:Arm32ProcessorArchitecture.cs
示例17: ReadResourceDirectory
public List<ProgramResource> ReadResourceDirectory(ImageReader rdr)
{
const uint DIR_MASK = 0x80000000;
var flags = rdr.ReadUInt32();
var date = rdr.ReadUInt32();
var version = rdr.ReadUInt32();
var cNameEntries = rdr.ReadUInt16();
var cIdEntries = rdr.ReadUInt16();
var entries = new List<ProgramResource>();
for (int i = 0; i < cNameEntries; ++i)
{
var rvaName = rdr.ReadUInt32();
var rvaEntry = rdr.ReadUInt32();
var subRdr = new LeImageReader(imgLoaded, rvaResources + (rvaEntry & ~DIR_MASK));
if ((rvaEntry & DIR_MASK) == 0)
throw new BadImageFormatException();
if ((rvaName & DIR_MASK) != 0)
{
var e = new ProgramResourceGroup
{
//Name = ReadResourceString(rvaName),
Name = ReadResourceUtf16leString(rvaResources + (rvaName & ~DIR_MASK)),
};
e.Resources.AddRange(ReadNameDirectory(subRdr, 0));
entries.Add(e);
}
}
for (int i = 0; i < cIdEntries; ++i)
{
var id = rdr.ReadUInt32();
var rvaEntry = rdr.ReadUInt32();
var subRdr = new LeImageReader(imgLoaded, rvaResources + (rvaEntry & ~DIR_MASK));
if ((rvaEntry & DIR_MASK) == 0)
throw new BadImageFormatException();
var e = new ProgramResourceGroup
{
Name = GenerateResourceName(id),
};
e.Resources.AddRange(ReadNameDirectory(subRdr, id));
entries.Add(e);
}
return entries;
}
开发者ID:relaxar,项目名称:reko,代码行数:43,代码来源:ResourceLoader.cs
示例18: Load
public ushort e_shstrndx; // section name string table index
public static Elf32_EHdr Load(ImageReader rdr)
{
return new Elf32_EHdr
{
e_type = rdr.ReadUInt16(),
e_machine = rdr.ReadUInt16(),
e_version = rdr.ReadUInt32(),
e_entry = rdr.ReadUInt32(),
e_phoff = rdr.ReadUInt32(),
e_shoff = rdr.ReadUInt32(),
e_flags = rdr.ReadUInt32(),
e_ehsize = rdr.ReadUInt16(),
e_phentsize = rdr.ReadUInt16(),
e_phnum = rdr.ReadUInt16(),
e_shentsize = rdr.ReadUInt16(),
e_shnum = rdr.ReadUInt16(),
e_shstrndx = rdr.ReadUInt16(),
};
}
开发者ID:gitter-badger,项目名称:reko,代码行数:21,代码来源:Elf32_EHdr.cs
示例19: ReadPointer
public static object ReadPointer(Type pointerType, int size, ImageReader rdr, ReaderContext ctx)
{
Debug.Print("Reading pointer at offset {0}, size {1}", rdr.Offset, size);
uint newOffset;
switch (size)
{
default:
throw new InvalidOperationException("Field size must be > 0.");
case 1: newOffset = rdr.ReadByte(); break;
case 2: newOffset = rdr.ReadUInt16(); break;
case 4: newOffset = rdr.ReadUInt32(); break;
}
Debug.Print("Structure of type {0} must start at offset {1:X}", pointerType.Name, newOffset);
rdr = rdr.Clone();
rdr.Offset = newOffset;
var dst = Activator.CreateInstance(pointerType);
var sr = new StructureReader(dst);
sr.Read(rdr);
return dst;
}
开发者ID:gitter-badger,项目名称:reko,代码行数:21,代码来源:FieldAttribute.cs
示例20: Load
public static Elf32_SHdr Load(ImageReader rdr)
{
try
{
return new Elf32_SHdr
{
sh_name = rdr.ReadUInt32(),
sh_type = (SectionHeaderType)rdr.ReadUInt32(),
sh_flags = rdr.ReadUInt32(),
sh_addr = rdr.ReadUInt32(), // Address
sh_offset = rdr.ReadUInt32(),
sh_size = rdr.ReadUInt32(),
sh_link = rdr.ReadUInt32(),
sh_info = rdr.ReadUInt32(),
sh_addralign = rdr.ReadUInt32(),
sh_entsize = rdr.ReadUInt32(),
};
} catch
{
//$TODO: report error?
return null;
}
}
开发者ID:relaxar,项目名称:reko,代码行数:23,代码来源:ElfSection.cs
注:本文中的Reko.Core.ImageReader类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论