コード例 #1
0
ファイル: LLVMDasm.cs プロジェクト: BG4RFF/reko-extras
        private static unsafe LLVMDisasmContextRef Initialize(string triple)
        {
            NativeLibrary.Load(@"C:\msys64\mingw64\bin\libLLVM");

            LLVM.InitializeAllTargetMCs();
            LLVM.InitializeAllTargets();
            LLVM.InitializeAllTargetInfos();
            LLVM.InitializeAllAsmParsers();
            LLVM.InitializeAllAsmPrinters();
            LLVM.InitializeAllDisassemblers();

            byte[] tripleBytes = Encoding.ASCII.GetBytes(triple);

            LLVMDisasmContextRef hDasm;

            using (DisposableGCHandle hTriple = DisposableGCHandle.Pin(tripleBytes)) {
                hDasm = new LLVMDisasmContextRef(
                    new IntPtr(LLVM.CreateDisasm(
                                   (sbyte *)hTriple.AddrOfPinnedObject(),
                                   null, 0, IntPtr.Zero, IntPtr.Zero
                                   ))
                    );
            }

            if (hDasm == null)
            {
                throw new Exception("CreateDisasm failed");
            }

            LLVM.SetDisasmOptions(
                hDasm.Handle.ToPointer(),
                // use alternate variant (Intel) with hex immediates
                (ulong)(LLVMDisassemblerOption.PrintImmHex | LLVMDisassemblerOption.AsmPrinterVariant)
                );

            return(hDasm);
        }
コード例 #2
0
ファイル: LLVMDasm.cs プロジェクト: BG4RFF/reko-extras
 public LLVMDasm(string triple)
 {
     hDasm = Initialize(triple);
 }