95 lines
3.9 KiB
C#
95 lines
3.9 KiB
C#
// Copyright (c) StellaOps. All rights reserved.
|
|
// Licensed under AGPL-3.0-or-later. See LICENSE in the project root.
|
|
|
|
using FluentAssertions;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Logging;
|
|
using Microsoft.Extensions.Logging.Abstractions;
|
|
using StellaOps.BinaryIndex.Disassembly.B2R2;
|
|
using StellaOps.BinaryIndex.Disassembly.Iced;
|
|
using Xunit;
|
|
|
|
namespace StellaOps.BinaryIndex.Disassembly.Tests;
|
|
|
|
/// <summary>
|
|
/// Tests for the disassembly plugin capabilities reporting.
|
|
/// </summary>
|
|
[Trait("Category", "Unit")]
|
|
public sealed class PluginCapabilitiesTests
|
|
{
|
|
[Fact]
|
|
public void IcedPlugin_ReportsCorrectCapabilities()
|
|
{
|
|
// Arrange
|
|
var logger = NullLogger<IcedDisassemblyPlugin>.Instance;
|
|
var plugin = new IcedDisassemblyPlugin(logger);
|
|
|
|
// Act
|
|
var capabilities = plugin.Capabilities;
|
|
|
|
// Assert
|
|
capabilities.PluginId.Should().Be("stellaops.disasm.iced");
|
|
capabilities.Name.Should().Contain("Iced");
|
|
capabilities.SupportedArchitectures.Should().Contain(CpuArchitecture.X86);
|
|
capabilities.SupportedArchitectures.Should().Contain(CpuArchitecture.X86_64);
|
|
capabilities.SupportedArchitectures.Should().NotContain(CpuArchitecture.ARM64);
|
|
capabilities.SupportedFormats.Should().Contain(BinaryFormat.ELF);
|
|
capabilities.SupportedFormats.Should().Contain(BinaryFormat.PE);
|
|
capabilities.SupportedFormats.Should().Contain(BinaryFormat.Raw);
|
|
capabilities.SupportsLifting.Should().BeFalse();
|
|
capabilities.Priority.Should().BeGreaterThan(0);
|
|
}
|
|
|
|
[Fact]
|
|
public void B2R2Plugin_ReportsCorrectCapabilities()
|
|
{
|
|
// Arrange
|
|
var logger = NullLogger<B2R2DisassemblyPlugin>.Instance;
|
|
var plugin = new B2R2DisassemblyPlugin(logger);
|
|
|
|
// Act
|
|
var capabilities = plugin.Capabilities;
|
|
|
|
// Assert
|
|
capabilities.PluginId.Should().Be("stellaops.disasm.b2r2");
|
|
capabilities.Name.Should().Contain("B2R2");
|
|
capabilities.SupportedArchitectures.Should().Contain(CpuArchitecture.X86);
|
|
capabilities.SupportedArchitectures.Should().Contain(CpuArchitecture.X86_64);
|
|
capabilities.SupportedArchitectures.Should().Contain(CpuArchitecture.ARM32);
|
|
capabilities.SupportedArchitectures.Should().Contain(CpuArchitecture.ARM64);
|
|
capabilities.SupportedArchitectures.Should().Contain(CpuArchitecture.MIPS32);
|
|
capabilities.SupportedArchitectures.Should().Contain(CpuArchitecture.RISCV64);
|
|
capabilities.SupportedFormats.Should().Contain(BinaryFormat.ELF);
|
|
capabilities.SupportedFormats.Should().Contain(BinaryFormat.PE);
|
|
capabilities.SupportedFormats.Should().Contain(BinaryFormat.MachO);
|
|
capabilities.SupportsLifting.Should().BeTrue();
|
|
capabilities.SupportsCfgRecovery.Should().BeTrue();
|
|
}
|
|
|
|
[Fact]
|
|
public void IcedPlugin_CanHandle_ReturnsTrueForX86Elf()
|
|
{
|
|
// Arrange
|
|
var logger = NullLogger<IcedDisassemblyPlugin>.Instance;
|
|
var plugin = new IcedDisassemblyPlugin(logger);
|
|
|
|
// Act & Assert
|
|
plugin.Capabilities.CanHandle(CpuArchitecture.X86, BinaryFormat.ELF).Should().BeTrue();
|
|
plugin.Capabilities.CanHandle(CpuArchitecture.X86_64, BinaryFormat.PE).Should().BeTrue();
|
|
plugin.Capabilities.CanHandle(CpuArchitecture.ARM64, BinaryFormat.ELF).Should().BeFalse();
|
|
}
|
|
|
|
[Fact]
|
|
public void B2R2Plugin_CanHandle_ReturnsTrueForArm64Elf()
|
|
{
|
|
// Arrange
|
|
var logger = NullLogger<B2R2DisassemblyPlugin>.Instance;
|
|
var plugin = new B2R2DisassemblyPlugin(logger);
|
|
|
|
// Act & Assert
|
|
plugin.Capabilities.CanHandle(CpuArchitecture.ARM64, BinaryFormat.ELF).Should().BeTrue();
|
|
plugin.Capabilities.CanHandle(CpuArchitecture.ARM32, BinaryFormat.MachO).Should().BeTrue();
|
|
plugin.Capabilities.CanHandle(CpuArchitecture.RISCV64, BinaryFormat.ELF).Should().BeTrue();
|
|
}
|
|
}
|