private unsafe (DisassembleInfo, DisassemblerFtype) InitDisassembler() { DisassembleInfo info = new DisassembleInfo(); dis_asm.InitDisassembleInfo(info, IntPtr.Zero, fprintfDelegate); info.Arch = arch.Arch; info.Mach = arch.Mach; info.ReadMemoryFunc = bufferReadMemoryDelegate; info.Buffer = null; info.BufferVma = 0; info.BufferLength = 0; dis_asm.DisassembleInitForTarget(info); // create disassembler, returns a function pointer DisassemblerFtype disasm = dis_asm.Disassembler(arch.Arch, 0, arch.Mach, null); if (disasm == null) { string?archName = Enum.GetName(typeof(BfdArchitecture), arch.Arch); throw new NotSupportedException($"This build of binutils doesn't support architecture '{archName}'"); } return(info, disasm); }
private unsafe int BufferReadMemory(ulong memaddr, byte *myaddr, uint length, IntPtr dinfo) { DisassembleInfo di = new DisassembleInfo(dinfo.ToPointer()); return(dis_asm.BufferReadMemory(memaddr, myaddr, length, di)); }