Files
git.stella-ops.org/src/BinaryIndex/__Libraries/StellaOps.BinaryIndex.Disassembly.B2R2/B2R2ServiceCollectionExtensions.cs
2026-01-14 18:39:19 +02:00

94 lines
3.3 KiB
C#

// Copyright (c) StellaOps. All rights reserved.
// Licensed under AGPL-3.0-or-later. See LICENSE in the project root.
// Sprint: SPRINT_20260112_004_BINIDX_b2r2_lowuir_perf_cache (BINIDX-LIFTER-02)
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using StellaOps.BinaryIndex.Semantic;
namespace StellaOps.BinaryIndex.Disassembly.B2R2;
/// <summary>
/// Extension methods for registering the B2R2 disassembly plugin.
/// </summary>
public static class B2R2ServiceCollectionExtensions
{
/// <summary>
/// Adds the B2R2 disassembly plugin to the service collection.
/// Provides multi-architecture disassembly (x86, x64, ARM32, ARM64, MIPS, RISC-V, etc.).
/// </summary>
/// <param name="services">The service collection.</param>
/// <returns>The service collection for chaining.</returns>
public static IServiceCollection AddB2R2DisassemblyPlugin(this IServiceCollection services)
{
ArgumentNullException.ThrowIfNull(services);
services.TryAddEnumerable(ServiceDescriptor.Singleton<IDisassemblyPlugin, B2R2DisassemblyPlugin>());
return services;
}
/// <summary>
/// Adds the B2R2 lifter pool to the service collection.
/// Provides pooled lifters with warm preload for improved performance.
/// </summary>
/// <param name="services">The service collection.</param>
/// <param name="configuration">Configuration for binding pool options.</param>
/// <returns>The service collection for chaining.</returns>
public static IServiceCollection AddB2R2LifterPool(
this IServiceCollection services,
IConfiguration? configuration = null)
{
ArgumentNullException.ThrowIfNull(services);
if (configuration != null)
{
services.Configure<B2R2LifterPoolOptions>(
configuration.GetSection(B2R2LifterPoolOptions.SectionName));
}
else
{
services.Configure<B2R2LifterPoolOptions>(_ => { });
}
services.TryAddSingleton<B2R2LifterPool>();
return services;
}
/// <summary>
/// Adds the B2R2 LowUIR lifting service to the service collection.
/// Provides IR lifting with B2R2 LowUIR semantics.
/// </summary>
/// <param name="services">The service collection.</param>
/// <returns>The service collection for chaining.</returns>
public static IServiceCollection AddB2R2LowUirLiftingService(this IServiceCollection services)
{
ArgumentNullException.ThrowIfNull(services);
services.TryAddSingleton<IIrLiftingService, B2R2LowUirLiftingService>();
return services;
}
/// <summary>
/// Adds all B2R2 services to the service collection.
/// </summary>
/// <param name="services">The service collection.</param>
/// <param name="configuration">Configuration for binding options.</param>
/// <returns>The service collection for chaining.</returns>
public static IServiceCollection AddB2R2Services(
this IServiceCollection services,
IConfiguration? configuration = null)
{
ArgumentNullException.ThrowIfNull(services);
services.AddB2R2DisassemblyPlugin();
services.AddB2R2LifterPool(configuration);
services.AddB2R2LowUirLiftingService();
return services;
}
}