// Copyright (c) StellaOps. All rights reserved.
// Licensed under AGPL-3.0-or-later. See LICENSE in the project root.
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using StellaOps.BinaryIndex.Disassembly;
using StellaOps.BinaryIndex.Normalization;
using StellaOps.BinaryIndex.Semantic;
namespace StellaOps.BinaryIndex.DeltaSig;
///
/// Extension methods for registering delta signature services.
///
public static class ServiceCollectionExtensions
{
///
/// Adds delta signature generation and matching services.
/// Requires disassembly and normalization services to be registered.
/// If semantic services are registered, semantic fingerprinting will be available.
///
/// The service collection.
/// The service collection for chaining.
public static IServiceCollection AddDeltaSignatures(this IServiceCollection services)
{
services.AddSingleton(sp =>
{
var disassembly = sp.GetRequiredService();
var normalization = sp.GetRequiredService();
var logger = sp.GetRequiredService>();
// Semantic services are optional
var irLifting = sp.GetService();
var graphExtractor = sp.GetService();
var fingerprintGenerator = sp.GetService();
return new DeltaSignatureGenerator(
disassembly,
normalization,
irLifting,
graphExtractor,
fingerprintGenerator,
logger);
});
services.AddSingleton();
return services;
}
///
/// Adds delta signature services with semantic analysis support enabled.
/// Requires disassembly and normalization services to be registered.
///
/// The service collection.
/// The service collection for chaining.
public static IServiceCollection AddDeltaSignaturesWithSemantic(this IServiceCollection services)
{
// Register semantic services first
services.AddBinaryIndexSemantic();
// Then register delta signature services
return services.AddDeltaSignatures();
}
///
/// Adds all binary index services: disassembly, normalization, and delta signatures.
///
/// The service collection.
/// The service collection for chaining.
public static IServiceCollection AddBinaryIndexServices(this IServiceCollection services)
{
// Add disassembly with default plugins
services.AddDisassemblyServices();
// Add normalization pipelines
services.AddNormalizationPipelines();
// Add delta signature services
services.AddDeltaSignatures();
return services;
}
///
/// Adds all binary index services with semantic analysis: disassembly, normalization, semantic, and delta signatures.
///
/// The service collection.
/// The service collection for chaining.
public static IServiceCollection AddBinaryIndexServicesWithSemantic(this IServiceCollection services)
{
// Add disassembly with default plugins
services.AddDisassemblyServices();
// Add normalization pipelines
services.AddNormalizationPipelines();
// Add semantic analysis services
services.AddBinaryIndexSemantic();
// Add delta signature services (will pick up semantic services)
services.AddDeltaSignatures();
return services;
}
}