94 lines
3.3 KiB
C#
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;
|
|
}
|
|
}
|