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); }
public LLVMDasm(string triple) { hDasm = Initialize(triple); }