Пример #1
0
        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);
        }
Пример #2
0
        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));
        }