Files
reverse-engineering-anything/tests/fixtures/managedSignature.ts
T

44 lines
1.4 KiB
TypeScript

import { createHash } from "node:crypto";
import {
metadataSignature,
type SignatureDisplayTypeName,
type SignatureTypeName,
} from "../../src/dotnet/ManagedMemberInspectorCore.js";
import { buildManagedPeFixture } from "../../src/dotnet/ManagedPe.fixture.js";
import { readManagedMetadataLayout } from "../../src/dotnet/ManagedMetadataLayout.js";
import { readManagedPeLayout } from "../../src/dotnet/ManagedPeReader.js";
// Supply real metadata rows for the TypeDefOrRef coordinates used by the
// signature grammar and identity cases.
const bytes = buildManagedPeFixture({
typeSpecSignatures: [Buffer.from([0x08])],
typeReferences: Array.from({ length: 9 }, (_, index) => ({
namespace: "Fixture",
name: `Type${String(index + 2)}`,
})),
});
const pe = readManagedPeLayout(bytes);
if (pe.cli === null) throw new Error("Fixture has no CLI metadata");
const layout = readManagedMetadataLayout(
bytes,
pe.rvaToOffset(pe.cli.metadata.rva, pe.cli.metadata.size, "cli.metadata"),
pe.cli.metadata.size,
);
export const signature = (
blob: Buffer,
rawSha256?: string,
typeName: SignatureTypeName = () => null,
displayTypeName?: SignatureDisplayTypeName,
) =>
metadataSignature(blob, {
rawSha256: rawSha256 ?? createHash("sha256").update(blob).digest("hex"),
typeName,
displayTypeName,
layout,
issues: [],
scope: "fixture.signature",
blobOffset: 0,
});