Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Function/BNCreateBinaryDataViewFromFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ internal static extern IntPtr BNCreateBinaryDataViewFromFile(
IntPtr file ,

// BNFileAccessor* accessor
IntPtr accessor
in BNFileAccessor accessor
);
}
}
}
33 changes: 33 additions & 0 deletions Handle/BNBinaryView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ namespace BinaryNinja
{
public sealed class BinaryView : AbstractSafeHandle<BinaryView> , IEnumerable<Function>
{
private CustomFileAccessor? backingFileAccessor;

/// <summary>
/// Iterates the analysis functions in this view, so that
/// <c>foreach (Function function in view)</c> works. Mirrors Python's
Expand Down Expand Up @@ -109,6 +111,37 @@ public ulong Length
);
}

/// <summary>Creates a raw binary view backed by a custom file accessor.</summary>
/// <param name="accessor">The accessor that supplies the file contents.</param>
/// <param name="file">Optional metadata to associate with the view.</param>
/// <returns>The raw view, or null when the core cannot create it.</returns>
public static BinaryView? FromFile(
CustomFileAccessor accessor,
FileMetadata? file = null
)
{
if (null == accessor)
{
throw new ArgumentNullException(nameof(accessor));
}

FileMetadata actualFile = file ?? new FileMetadata();
BNFileAccessor nativeAccessor = accessor.ToNative();
BinaryView? result = BinaryView.TakeHandle(
NativeMethods.BNCreateBinaryDataViewFromFile(
actualFile.DangerousGetHandle(),
in nativeAccessor
)
);
if (null != result)
{
result.backingFileAccessor = accessor;
}

GC.KeepAlive(accessor);
return result;
}

public static BinaryView? Create(FileMetadata file)
{
return BinaryView.TakeHandle(
Expand Down
Loading