mirror of
https://github.com/morluto/rea.git
synced 2026-10-31 11:56:12 +00:00
87 lines
2.3 KiB
TypeScript
87 lines
2.3 KiB
TypeScript
import type {
|
|
CapabilityDescriptor,
|
|
ProviderIdentity,
|
|
} from "../application/AnalysisProvider.js";
|
|
import type { OfficialToolName } from "../contracts/officialToolContracts.js";
|
|
|
|
/** Public identity committed by every Hopper-backed observation. */
|
|
export const HOPPER_PROVIDER_IDENTITY: ProviderIdentity = Object.freeze({
|
|
id: "hopper",
|
|
name: "Hopper Disassembler",
|
|
version: null,
|
|
});
|
|
|
|
/** Analyst operations implemented by REA's private Hopper bridge. */
|
|
export const HOPPER_OPERATIONS = Object.freeze([
|
|
"address_name",
|
|
"comment",
|
|
"current_address",
|
|
"current_procedure",
|
|
"current_document",
|
|
"goto_address",
|
|
"inline_comment",
|
|
"list_bookmarks",
|
|
"list_documents",
|
|
"list_names",
|
|
"list_procedures",
|
|
"list_segments",
|
|
"list_strings",
|
|
"next_address",
|
|
"prev_address",
|
|
"procedure_address",
|
|
"procedure_assembly",
|
|
"procedure_callees",
|
|
"procedure_callers",
|
|
"procedure_info",
|
|
"read_function_instructions",
|
|
"read_bytes",
|
|
"address_to_file_offset",
|
|
"procedure_references",
|
|
"procedure_pseudo_code",
|
|
"resolve_containing_procedure",
|
|
"search_procedures",
|
|
"search_strings",
|
|
"set_address_name",
|
|
"set_addresses_names",
|
|
"set_bookmark",
|
|
"set_comment",
|
|
"set_current_document",
|
|
"set_inline_comment",
|
|
"unset_bookmark",
|
|
"xrefs",
|
|
"analyze_function",
|
|
] as const satisfies readonly (OfficialToolName | "analyze_function")[]);
|
|
|
|
const MUTATING_OPERATIONS = new Set<string>([
|
|
"set_address_name",
|
|
"set_addresses_names",
|
|
"set_bookmark",
|
|
"set_comment",
|
|
"set_inline_comment",
|
|
"unset_bookmark",
|
|
]);
|
|
|
|
/** Source-owned capabilities without acquiring or probing a Hopper session. */
|
|
export const CAPABILITIES: readonly CapabilityDescriptor[] = Object.freeze(
|
|
HOPPER_OPERATIONS.map((operation) =>
|
|
Object.freeze({
|
|
provider: HOPPER_PROVIDER_IDENTITY,
|
|
operation,
|
|
available: true,
|
|
reason: null,
|
|
effects: Object.freeze({
|
|
mutatesArtifact: MUTATING_OPERATIONS.has(operation),
|
|
launchesProcess: true,
|
|
mayShowUi: true,
|
|
mayAccessNetwork: false,
|
|
mayWriteFilesystem: MUTATING_OPERATIONS.has(operation),
|
|
changesPermissions: false,
|
|
requiresRoot: false,
|
|
}),
|
|
limitations: Object.freeze([
|
|
"Results depend on Hopper's completed static analysis.",
|
|
]),
|
|
}),
|
|
),
|
|
);
|