public List <CsInsn> Disasm(byte[] code, ulong address, uint count = 0) { var result = new List <CsInsn>(); var insnAll = new IntPtr(); var insnSize = Marshal.SizeOf <CsInsn>(); var res = CsNative.CsDisasm(Handle, code, code.Length, address, count, ref insnAll); if (res > 0) { try { // Read all instructions. var insnOffset = insnAll; for (uint i = 0; i < res; i++) { result.Add(Marshal.PtrToStructure <CsInsn>(insnOffset)); insnOffset += insnSize; } } finally { // Free the buffer. CsNative.CsFree(insnAll, res); } } else { var status = CsNative.CsErrno(Handle); if (status != CsErr.CS_ERR_OK) { throw new CsException(status); } } return(result); }
public CsErr Errno() { return(CsNative.CsErrno(Handle)); }