rea-agents 3.0.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (628) hide show
  1. package/README.md +83 -108
  2. package/bridge/ghidra/ReaGhidraBridge.java +609 -841
  3. package/bridge/hopper_bridge.py +99 -344
  4. package/dist/application/AbortablePromise.js +6 -3
  5. package/dist/application/AnalysisContextQueries.js +21 -9
  6. package/dist/application/AnalysisSnapshotCache.js +0 -1
  7. package/dist/application/AnalysisSnapshotFiles.js +7 -7
  8. package/dist/application/AndroidApplicationService.js +1 -1
  9. package/dist/application/AppleApplicationService.js +1 -1
  10. package/dist/application/ArtifactExtraction.js +35 -54
  11. package/dist/application/ArtifactExtractionDestination.js +17 -0
  12. package/dist/application/ArtifactGraphConstruction.js +2 -17
  13. package/dist/application/ArtifactInventory/classify.js +2 -6
  14. package/dist/application/ArtifactInventory/hash.js +2 -20
  15. package/dist/application/ArtifactInventory/policy.js +17 -0
  16. package/dist/application/ArtifactInventory/reader.js +1 -4
  17. package/dist/application/ArtifactInventory/scanCanonical.js +8 -15
  18. package/dist/application/ArtifactInventory/scanReader.js +76 -58
  19. package/dist/application/ArtifactInventory/types.js +1 -5
  20. package/dist/application/ArtifactInventory.js +6 -14
  21. package/dist/application/AuthorizedArtifactInventory.js +3 -13
  22. package/dist/application/BinarySession.js +54 -28
  23. package/dist/application/BinarySessionComposition.js +0 -11
  24. package/dist/application/BinarySessionOpen.js +2 -1
  25. package/dist/application/BinarySessionRecords.js +24 -86
  26. package/dist/application/BinarySessionStatus.js +16 -21
  27. package/dist/application/BinaryTargetResolver.js +216 -0
  28. package/dist/application/BrowserEvidence.js +39 -57
  29. package/dist/application/BrowserObservationService.js +3 -6
  30. package/dist/application/BrowserScenarioCaptureService.js +3 -6
  31. package/dist/application/BrowserScenarioEvidence.js +3 -3
  32. package/dist/application/CallPathTracing.js +2 -36
  33. package/dist/application/CapabilityClientRequirements.js +26 -0
  34. package/dist/application/CapabilityInventory.js +143 -77
  35. package/dist/application/ClientConfigurationDocument.js +27 -0
  36. package/dist/application/ClientRegistrationStatus.js +16 -13
  37. package/dist/application/CommandShimReplay.js +14 -1
  38. package/dist/application/DirectAnalysis.js +22 -46
  39. package/dist/application/DirectAnalysisStatus.js +5 -61
  40. package/dist/application/Doctor.js +11 -32
  41. package/dist/application/DoctorDiagnostics.js +1 -2
  42. package/dist/application/DoctorScope.js +1 -1
  43. package/dist/application/ElectronActiveEvidence.js +50 -0
  44. package/dist/application/ElectronActiveObservationPort.js +1 -0
  45. package/dist/application/ElectronActiveObservationService.js +78 -0
  46. package/dist/application/ElectronBoundaryAnalysis.js +7 -8
  47. package/dist/application/ElectronBoundaryGraphContext.js +1 -1
  48. package/dist/application/ElectronBoundaryGraphIpc.js +3 -3
  49. package/dist/application/ElectronBoundaryGraphNative.js +1 -2
  50. package/dist/application/ElectronBoundaryGraphWindows.js +6 -8
  51. package/dist/application/ElectronEvidence.js +4 -7
  52. package/dist/application/ElectronObservationService.js +5 -9
  53. package/dist/application/EnhancedLiteralTracing.js +42 -65
  54. package/dist/application/EnhancedTools.js +98 -64
  55. package/dist/application/EvidenceBundleCommands.js +16 -12
  56. package/dist/application/EvidenceBundleFiles.js +9 -15
  57. package/dist/application/EvidenceLedger.js +14 -42
  58. package/dist/application/FilesystemSnapshot.js +2 -3
  59. package/dist/application/InterfaceBuilderAnalysis.js +266 -0
  60. package/dist/application/InventoryProjectionEvidence.js +4 -2
  61. package/dist/application/InvestigationProviders.js +1 -1
  62. package/dist/application/JavaScriptApplicationEvidence.js +2 -5
  63. package/dist/application/JavaScriptApplicationEvidenceGraph.js +6 -10
  64. package/dist/application/JavaScriptApplicationService.js +6 -29
  65. package/dist/application/JavaScriptApplicationWorkflowEvidence.js +5 -5
  66. package/dist/application/JavaScriptApplicationWorkflowService.js +0 -8
  67. package/dist/application/JavaScriptArtifactAnalysis.js +38 -127
  68. package/dist/application/JavaScriptArtifactFiles.js +67 -107
  69. package/dist/application/JavaScriptArtifactGraphAccumulator.js +0 -7
  70. package/dist/application/JavaScriptArtifactGraphBuilder.js +7 -58
  71. package/dist/application/JavaScriptArtifactGraphBundlers.js +1 -6
  72. package/dist/application/JavaScriptArtifactGraphContext.js +12 -39
  73. package/dist/application/JavaScriptArtifactGraphDocuments.js +4 -11
  74. package/dist/application/JavaScriptArtifactGraphEvidence.js +0 -14
  75. package/dist/application/JavaScriptArtifactGraphFindings.js +3 -3
  76. package/dist/application/JavaScriptArtifactGraphStructure.js +16 -17
  77. package/dist/application/JavaScriptArtifactPathResolution.js +61 -49
  78. package/dist/application/JavaScriptArtifactReconstruction.js +5 -10
  79. package/dist/application/JavaScriptArtifactReconstructionInput.js +2 -14
  80. package/dist/application/JavaScriptJsonModules.js +2 -2
  81. package/dist/application/JavaScriptModuleRelationships.js +22 -27
  82. package/dist/application/JavaScriptReplayPermission.js +1 -1
  83. package/dist/application/JavaScriptReplayPlanning.js +9 -3
  84. package/dist/application/JavaScriptReplayService.js +29 -47
  85. package/dist/application/JavaScriptReturnShapeProjection.js +12 -42
  86. package/dist/application/JavaScriptRuntimeObservationEvidence.js +7 -8
  87. package/dist/application/JavaScriptRuntimeObservationService.js +4 -8
  88. package/dist/application/JavaScriptRuntimeReconciliationEvidence.js +2 -3
  89. package/dist/application/JavaScriptSemanticGraphBuilder.js +11 -41
  90. package/dist/application/JavaScriptSemanticGraphConstruction.js +5 -29
  91. package/dist/application/JavaScriptSemanticGraphEvidence.js +1 -1
  92. package/dist/application/JavaScriptSemanticGraphFingerprintProjection.js +1 -1
  93. package/dist/application/JavaScriptSemanticGraphFlowProjection.js +0 -13
  94. package/dist/application/JavaScriptSemanticGraphProjection.js +1 -3
  95. package/dist/application/JavaScriptSemanticTraceService.js +1 -10
  96. package/dist/application/JsonFiles.js +79 -0
  97. package/dist/application/LinuxHopper.js +11 -9
  98. package/dist/application/LoopbackReplay.js +26 -23
  99. package/dist/application/LoopbackReplayRecorder.js +29 -1
  100. package/dist/application/ManagedApplicationGraphService.js +1 -2
  101. package/dist/application/ManagedMemberComparisonService.js +11 -41
  102. package/dist/application/ManagedNativeVerificationService.js +1 -2
  103. package/dist/application/ManagedReconstructionService.js +1 -1
  104. package/dist/application/ManagedRuntimeCorrelationService.js +14 -13
  105. package/dist/application/NativeApiInspection.js +2 -7
  106. package/dist/application/NativeUiActionTrace.js +394 -0
  107. package/dist/application/NodeRuntimeCharacterizationService.js +11 -16
  108. package/dist/application/PermissionAuthority.js +15 -7
  109. package/dist/application/PermissionFailure.js +5 -0
  110. package/dist/application/ProcessCaptureAuthority.js +5 -7
  111. package/dist/application/ProcessCaptureJournal.js +3 -2
  112. package/dist/application/ProcessCaptureLifecycle.js +10 -12
  113. package/dist/application/ProcessCheckpoints.js +29 -11
  114. package/dist/application/ProcessCli.js +8 -17
  115. package/dist/application/ProcessEvidence.js +5 -7
  116. package/dist/application/ProcessHarness.js +60 -20
  117. package/dist/application/ProcessNormalization.js +2 -1
  118. package/dist/application/ProcessReactiveCoordinator.js +2 -4
  119. package/dist/application/ProcessReactiveEffects.js +9 -3
  120. package/dist/application/ProcessReactiveHarness.js +13 -7
  121. package/dist/application/ProcessSampling.js +2 -4
  122. package/dist/application/ProcessTimer.js +39 -0
  123. package/dist/application/ProjectPermissionStore.js +39 -95
  124. package/dist/application/RealHopperAssertions.js +20 -66
  125. package/dist/application/ReconstructionCoverageService.js +12 -58
  126. package/dist/application/ReconstructionObligationAuthority.js +2 -2
  127. package/dist/application/ReconstructionObligationCandidates.js +4 -4
  128. package/dist/application/ReconstructionObligationLedgerEvaluation.js +8 -15
  129. package/dist/application/ReconstructionObligationLedgerProjection.js +3 -7
  130. package/dist/application/ReconstructionObligationLedgerService.js +19 -38
  131. package/dist/application/ReferenceSourceImport.js +21 -47
  132. package/dist/application/ReferenceSourceImportEntries.js +2 -4
  133. package/dist/application/ReferenceSourceImportPolicy.js +5 -32
  134. package/dist/application/ReferenceSourceImportTypes.js +0 -16
  135. package/dist/application/RuntimeExecutableDiagnostics.js +55 -29
  136. package/dist/application/SessionProviderRouter.js +2 -2
  137. package/dist/application/Setup.js +1 -3
  138. package/dist/application/SetupClientConfiguration.js +22 -88
  139. package/dist/application/SetupRegistrationEnvironment.js +0 -7
  140. package/dist/application/StoreFileLock.js +119 -0
  141. package/dist/application/TerminalRenderer.js +2 -3
  142. package/dist/application/Uninstall.js +9 -14
  143. package/dist/application/UnknownEvidence.js +1 -1
  144. package/dist/application/WindowsCapabilities.js +5 -4
  145. package/dist/artifacts/ArtifactPaths.js +2 -5
  146. package/dist/artifacts/ArtifactProvider.js +43 -67
  147. package/dist/artifacts/DirectoryArtifactReader.js +13 -8
  148. package/dist/artifacts/MachOSliceArtifactReader.js +1 -5
  149. package/dist/artifacts/NativeDmgArtifactReader.js +11 -11
  150. package/dist/artifacts/NibArchive.js +269 -0
  151. package/dist/artifacts/SafeOutputTree.js +21 -31
  152. package/dist/browser/BrowserProcessStartup.js +1 -2
  153. package/dist/browser/CdpAuthorizedMainFrame.js +16 -0
  154. package/dist/browser/CdpBrowserProvider.js +3 -13
  155. package/dist/browser/CdpCanonicalJsonDigest.js +9 -0
  156. package/dist/browser/CdpCaptureDocuments.js +28 -76
  157. package/dist/browser/CdpCaptureEventBodyShapes.js +13 -33
  158. package/dist/browser/CdpCaptureEventHandlers.js +22 -87
  159. package/dist/browser/CdpCaptureEvents.js +2 -8
  160. package/dist/browser/CdpCaptureStorage.js +9 -20
  161. package/dist/browser/CdpCaptureStorageFingerprints.js +85 -95
  162. package/dist/browser/CdpCaptureValues.js +21 -21
  163. package/dist/browser/CdpConnection.js +10 -25
  164. package/dist/browser/CdpElectronInspection.js +29 -51
  165. package/dist/browser/CdpElectronProvider.js +10 -35
  166. package/dist/browser/CdpElectronScriptEvents.js +8 -16
  167. package/dist/browser/CdpElectronScripts.js +6 -35
  168. package/dist/browser/CdpElectronWorkers.js +6 -10
  169. package/dist/browser/CdpEndpoint.js +25 -41
  170. package/dist/browser/CdpObservationSession.js +14 -26
  171. package/dist/browser/CdpPageCapture.js +34 -48
  172. package/dist/browser/CdpPageCaptureScripts.js +1 -19
  173. package/dist/browser/CdpPageCaptureWorkers.js +6 -10
  174. package/dist/browser/CdpSafeMetadata.js +19 -22
  175. package/dist/browser/CdpScreenshot.js +3 -5
  176. package/dist/browser/CdpTargetSession.js +1 -2
  177. package/dist/browser/CdpWebMcpDiscovery.js +13 -22
  178. package/dist/browser/ElectronFileScope.js +8 -19
  179. package/dist/browser/JavaScriptRuntimeScope.js +10 -10
  180. package/dist/browser/PlaywrightBrowserScenarioProvider.js +31 -64
  181. package/dist/browser/PlaywrightElectronActiveActions.js +309 -0
  182. package/dist/browser/PlaywrightElectronActiveProvider.js +274 -0
  183. package/dist/browser/PlaywrightExecutionBoundary.js +16 -5
  184. package/dist/browser/PlaywrightScenarioActions.js +3 -7
  185. package/dist/browser/PlaywrightScenarioArtifacts.js +23 -92
  186. package/dist/browser/PlaywrightScenarioBrowser.js +7 -9
  187. package/dist/browser/PlaywrightScenarioEvents.js +45 -94
  188. package/dist/browser/PlaywrightScenarioSession.js +18 -34
  189. package/dist/browser/PngVisualDiff.js +22 -14
  190. package/dist/browser/SensitiveTextCapture.js +1 -18
  191. package/dist/browser/V8InspectorCaptureProjection.js +7 -7
  192. package/dist/browser/V8InspectorEndpoint.js +12 -14
  193. package/dist/browser/V8InspectorProvider.js +20 -61
  194. package/dist/browser/WebSourceMapFetcher.js +56 -176
  195. package/dist/catalogIdentity.js +12 -60
  196. package/dist/cli/artifactCommands.js +49 -77
  197. package/dist/cli/coreAnalysisCommands.js +83 -133
  198. package/dist/cli/javascriptApplicationAnalysis.js +1 -9
  199. package/dist/cli/managedCommands.js +6 -271
  200. package/dist/cli/setupCommands.js +3 -12
  201. package/dist/cli/utilityCommands.js +7 -41
  202. package/dist/cli.js +0 -2
  203. package/dist/cliApplicationCommands.js +44 -114
  204. package/dist/cliBrowserAdvancedCommands.js +12 -102
  205. package/dist/cliBrowserCommands.js +19 -124
  206. package/dist/cliBrowserContext.js +30 -0
  207. package/dist/cliCommandNames.js +5 -5
  208. package/dist/cliElectronCommands.js +49 -71
  209. package/dist/cliEvidenceCommands.js +8 -77
  210. package/dist/cliJavaScriptRuntimeCommands.js +18 -92
  211. package/dist/cliJsonInput.js +4 -14
  212. package/dist/cliObservationOptions.js +11 -92
  213. package/dist/cliPolicyCommands.js +2 -16
  214. package/dist/cliProcessCommands.js +3 -3
  215. package/dist/cliSetup.js +0 -13
  216. package/dist/config/browserScenario.js +77 -0
  217. package/dist/config/electronAutomation.js +35 -0
  218. package/dist/config/environment.js +6 -9
  219. package/dist/config/javascriptReplay.js +41 -0
  220. package/dist/config/managedRuntime.js +25 -0
  221. package/dist/config/parseConfig.js +56 -232
  222. package/dist/config/parsers.js +16 -28
  223. package/dist/config/passiveObservation.js +87 -0
  224. package/dist/config/permissions.js +0 -7
  225. package/dist/config/processCapture.js +47 -0
  226. package/dist/contracts/analysisSearchContract.js +2 -5
  227. package/dist/contracts/applicationToolContracts.js +58 -114
  228. package/dist/contracts/applicationWorkflowInputContracts.js +29 -114
  229. package/dist/contracts/artifactComparisonExample.js +58 -60
  230. package/dist/contracts/artifactToolContracts.js +37 -91
  231. package/dist/contracts/browserScenarioToolContracts.js +6 -51
  232. package/dist/contracts/browserToolContracts.js +10 -75
  233. package/dist/contracts/electronToolContracts.js +27 -98
  234. package/dist/contracts/enhancedInputs.js +31 -78
  235. package/dist/contracts/errorSchemas.js +0 -1
  236. package/dist/contracts/functionComparisonExample.js +10 -24
  237. package/dist/contracts/functionInstructionContract.js +1 -3
  238. package/dist/contracts/functionWorkflowToolContracts.js +4 -5
  239. package/dist/contracts/hopperMemoryContracts.js +3 -3
  240. package/dist/contracts/investigationExamples.js +14 -11
  241. package/dist/contracts/javascriptApplicationWorkflowExamples.js +12 -19
  242. package/dist/contracts/javascriptRuntimeObservationToolContracts.js +2 -20
  243. package/dist/contracts/javascriptRuntimeReconciliationExample.js +45 -12
  244. package/dist/contracts/managedToolContracts.js +10 -104
  245. package/dist/contracts/managedWorkflowExamples.js +77 -125
  246. package/dist/contracts/managedWorkflowToolContracts.js +51 -74
  247. package/dist/contracts/nativeToolContracts.js +9 -14
  248. package/dist/contracts/processCaptureExample.js +2 -69
  249. package/dist/contracts/promptContracts.js +49 -67
  250. package/dist/contracts/providerSelection.js +0 -1
  251. package/dist/contracts/reconstructionReadinessExample.js +1 -6
  252. package/dist/contracts/sessionStatusContract.js +1 -17
  253. package/dist/contracts/sessionToolSchemas.js +52 -0
  254. package/dist/contracts/toolContractExamples.js +11 -10
  255. package/dist/contracts/toolContractHelpers.js +19 -0
  256. package/dist/contracts/toolContracts.js +60 -143
  257. package/dist/contracts/toolEffects.js +16 -9
  258. package/dist/contracts/toolOutputSchemaGroups.js +47 -86
  259. package/dist/contracts/toolOutputSchemaPrimitives.js +72 -62
  260. package/dist/contracts/toolSchemaMetadata.js +117 -0
  261. package/dist/contracts/unknownContractExamples.js +0 -2
  262. package/dist/doctorRuntime.js +1 -1
  263. package/dist/domain/analysisErrorPresentation.js +46 -54
  264. package/dist/domain/analysisErrorProjection.js +28 -37
  265. package/dist/domain/analysisProfile.js +3 -31
  266. package/dist/domain/analysisSnapshot.js +3 -12
  267. package/dist/domain/androidApplication.js +15 -52
  268. package/dist/domain/appleApplication.js +24 -65
  269. package/dist/domain/artifactComparison.js +11 -29
  270. package/dist/domain/artifactGraph.js +14 -44
  271. package/dist/domain/artifactInspection.js +38 -69
  272. package/dist/domain/artifactInventoryEvidence.js +27 -21
  273. package/dist/domain/binaryTarget.js +2 -219
  274. package/dist/domain/binaryTargetTypes.js +1 -0
  275. package/dist/domain/browserCaptureComparison.js +35 -60
  276. package/dist/domain/browserObservation.js +45 -197
  277. package/dist/domain/browserObservationSchemas.js +5 -23
  278. package/dist/domain/browserScenario.js +11 -14
  279. package/dist/domain/browserScenarioCapture.js +11 -12
  280. package/dist/domain/browserScenarioCaptureValues.js +146 -84
  281. package/dist/domain/browserScenarioDiff.js +2 -59
  282. package/dist/domain/browserScenarioDiffEvidence.js +51 -0
  283. package/dist/domain/browserScenarioDiffValues.js +21 -38
  284. package/dist/domain/browserScenarioValues.js +80 -109
  285. package/dist/domain/browserSession.js +4 -7
  286. package/dist/domain/bundleComparison.js +6 -32
  287. package/dist/domain/bytecodeProvider.js +53 -54
  288. package/dist/domain/callPath.js +50 -169
  289. package/dist/domain/callPathSchemas.js +79 -0
  290. package/dist/domain/changedBehavior.js +34 -60
  291. package/dist/domain/completionLedgerGeneration.js +8 -14
  292. package/dist/domain/conformancePackage.js +126 -97
  293. package/dist/domain/conformanceReplay.js +39 -11
  294. package/dist/domain/conformanceTrustGate.js +174 -30
  295. package/dist/domain/customProtocolCapture.js +4 -4
  296. package/dist/domain/electronActiveObservation.js +244 -0
  297. package/dist/domain/electronObservation.js +21 -83
  298. package/dist/domain/electronStaticAnalysisBrowser.js +36 -46
  299. package/dist/domain/electronStaticAnalysisIpc.js +38 -14
  300. package/dist/domain/electronStaticAnalysisNative.js +1 -8
  301. package/dist/domain/electronStaticAnalysisValues.js +14 -18
  302. package/dist/domain/errors.js +33 -54
  303. package/dist/domain/eventProcessTree.js +101 -90
  304. package/dist/domain/evidence.js +2 -10
  305. package/dist/domain/evidenceBundle.js +3 -5
  306. package/dist/domain/evidenceCompletionLedger.js +6 -8
  307. package/dist/domain/functionComparison.js +4 -14
  308. package/dist/domain/functionComparisonNormalization.js +8 -8
  309. package/dist/domain/functionComparisonResults.js +25 -15
  310. package/dist/domain/functionComparisonSchemas.js +49 -33
  311. package/dist/domain/functionDossierEvidence.js +31 -151
  312. package/dist/domain/hopperStartupFailure.js +1 -1
  313. package/dist/domain/hopperValues.js +17 -141
  314. package/dist/domain/inputIssueProjection.js +4 -1
  315. package/dist/domain/interfaceBuilderGraph.js +654 -0
  316. package/dist/domain/javascriptApplicationAnalysis.js +8 -112
  317. package/dist/domain/javascriptApplicationChangeGraph.js +22 -82
  318. package/dist/domain/javascriptApplicationEvidenceSchemas.js +59 -47
  319. package/dist/domain/javascriptApplicationGraph.js +3 -13
  320. package/dist/domain/javascriptApplicationGraphSchemas.js +12 -34
  321. package/dist/domain/javascriptApplicationVersionComparison.js +26 -30
  322. package/dist/domain/javascriptApplicationVersionComparisonSchemas.js +123 -68
  323. package/dist/domain/javascriptApplicationVersionItems.js +120 -53
  324. package/dist/domain/javascriptApplicationVersionKeys.js +24 -11
  325. package/dist/domain/javascriptAstFingerprint.js +25 -58
  326. package/dist/domain/javascriptAstValues.js +9 -0
  327. package/dist/domain/javascriptExportInstrumentation.js +2 -4
  328. package/dist/domain/javascriptExportShapeComparison.js +6 -7
  329. package/dist/domain/javascriptExportShapeComparisonSchemas.js +70 -77
  330. package/dist/domain/javascriptExportShapeSelection.js +17 -19
  331. package/dist/domain/javascriptFeatureSeed.js +20 -12
  332. package/dist/domain/javascriptFeatureTrace.js +13 -67
  333. package/dist/domain/javascriptFeatureTraceSchemas.js +24 -52
  334. package/dist/domain/javascriptFeatureTraversal.js +1 -44
  335. package/dist/domain/javascriptNativeHandoff.js +1 -1
  336. package/dist/domain/javascriptReplay.js +100 -101
  337. package/dist/domain/javascriptRuntimeLoadState.js +3 -8
  338. package/dist/domain/javascriptRuntimeObservation.js +43 -103
  339. package/dist/domain/javascriptRuntimeReconciliation.js +1 -3
  340. package/dist/domain/javascriptRuntimeReconciliationActive.js +80 -0
  341. package/dist/domain/javascriptRuntimeReconciliationGraph.js +21 -33
  342. package/dist/domain/javascriptRuntimeReconciliationMatching.js +75 -61
  343. package/dist/domain/javascriptRuntimeReconciliationParsing.js +21 -46
  344. package/dist/domain/javascriptRuntimeReconciliationResult.js +25 -19
  345. package/dist/domain/javascriptRuntimeReconciliationRuntime.js +8 -12
  346. package/dist/domain/javascriptRuntimeReconciliationSchemas.js +34 -49
  347. package/dist/domain/javascriptRuntimeStaticCandidates.js +3 -3
  348. package/dist/domain/javascriptSemanticAnalysis.js +12 -45
  349. package/dist/domain/javascriptSemanticAsyncEffects.js +1 -9
  350. package/dist/domain/javascriptSemanticCallResolution.js +6 -16
  351. package/dist/domain/javascriptSemanticCalls.js +5 -32
  352. package/dist/domain/javascriptSemanticChildProcesses.js +1 -11
  353. package/dist/domain/javascriptSemanticCoverage.js +11 -0
  354. package/dist/domain/javascriptSemanticDataEffectHelpers.js +1 -8
  355. package/dist/domain/javascriptSemanticDataEffects.js +1 -11
  356. package/dist/domain/javascriptSemanticFingerprints.js +3 -5
  357. package/dist/domain/javascriptSemanticGraphSchemas.js +25 -51
  358. package/dist/domain/javascriptSemanticGraphSerialization.js +2 -13
  359. package/dist/domain/javascriptSemanticIr.js +1 -29
  360. package/dist/domain/javascriptSemanticObjects.js +1 -5
  361. package/dist/domain/javascriptSemanticPrimitives.js +2 -9
  362. package/dist/domain/javascriptSemanticProjection.js +0 -18
  363. package/dist/domain/javascriptSemanticPromises.js +9 -16
  364. package/dist/domain/javascriptSemanticProvenance.js +16 -19
  365. package/dist/domain/javascriptSemanticQuery.js +17 -139
  366. package/dist/domain/javascriptSemanticQueryAssessment.js +9 -37
  367. package/dist/domain/javascriptSemanticQueryIdentity.js +2 -23
  368. package/dist/domain/javascriptSemanticQuerySchemas.js +14 -107
  369. package/dist/domain/javascriptSemanticResources.js +1 -6
  370. package/dist/domain/javascriptSemanticReturns.js +10 -27
  371. package/dist/domain/javascriptSemanticValueTypes.js +1 -0
  372. package/dist/domain/javascriptSemanticValues.js +44 -62
  373. package/dist/domain/javascriptStaticAnalysis.js +21 -43
  374. package/dist/domain/javascriptStaticAnalysisBundler.js +34 -93
  375. package/dist/domain/javascriptStaticAnalysisCalls.js +17 -16
  376. package/dist/domain/javascriptStaticAnalysisFindings.js +3 -19
  377. package/dist/domain/javascriptStaticAnalysisHelpers.js +47 -88
  378. package/dist/domain/javascriptStaticAnalysisState.js +1 -5
  379. package/dist/domain/javascriptStaticAnalysisTypes.js +1 -0
  380. package/dist/domain/jsonShape.js +7 -33
  381. package/dist/domain/localPath.js +7 -0
  382. package/dist/domain/managedApplicationGraph.js +9 -41
  383. package/dist/domain/managedApplicationGraphCoverage.js +24 -156
  384. package/dist/domain/managedApplicationGraphNodes.js +10 -13
  385. package/dist/domain/managedArtifact.js +14 -27
  386. package/dist/domain/managedMemberComparison.js +90 -92
  387. package/dist/domain/managedMemberComparisonCoverage.js +11 -33
  388. package/dist/domain/managedMemberComparisonItems.js +221 -0
  389. package/dist/domain/managedMemberComparisonMatch.js +8 -208
  390. package/dist/domain/managedNativeVerification.js +3 -6
  391. package/dist/domain/managedNativeVerificationMatch.js +55 -59
  392. package/dist/domain/managedNativeVerificationSchemas.js +83 -47
  393. package/dist/domain/managedReconstruction.js +19 -23
  394. package/dist/domain/managedRuntimeCorrelation.js +6 -9
  395. package/dist/domain/nativeApiBoundary.js +17 -14
  396. package/dist/domain/nativeInspection.js +0 -2
  397. package/dist/domain/nativeInvestigationGraph.js +351 -0
  398. package/dist/domain/nativeValueFlow.js +61 -0
  399. package/dist/domain/nodeRuntimeCharacterization.js +15 -18
  400. package/dist/domain/objcSwiftMetadata.js +254 -0
  401. package/dist/domain/peInspection.js +1 -1
  402. package/dist/domain/permissionPolicy.js +13 -0
  403. package/dist/domain/processCapture.js +76 -113
  404. package/dist/domain/processCaptureExample.js +68 -0
  405. package/dist/domain/processCaptureParsing.js +21 -0
  406. package/dist/domain/processCaptureReactiveSchema.js +68 -0
  407. package/dist/domain/processCaptureReactiveValidation.js +8 -3
  408. package/dist/domain/processCaptureValidation.js +8 -10
  409. package/dist/domain/processComparison.js +12 -16
  410. package/dist/domain/processObservation.js +5 -6
  411. package/dist/domain/processReactiveMatching.js +32 -46
  412. package/dist/domain/processReactiveRuntime.js +4 -8
  413. package/dist/domain/processReactiveScenario.js +28 -94
  414. package/dist/domain/processReactiveScenarioPreflight.js +5 -30
  415. package/dist/domain/processReactiveTransition.js +42 -21
  416. package/dist/domain/processScenario.js +62 -93
  417. package/dist/domain/processTraceComparison.js +0 -7
  418. package/dist/domain/processTraceEvaluation.js +14 -4
  419. package/dist/domain/processTraceSpecification.js +11 -17
  420. package/dist/domain/protocolCapture.js +11 -9
  421. package/dist/domain/reconstructionCoverage.js +62 -129
  422. package/dist/domain/reconstructionCoverageEvaluation.js +17 -17
  423. package/dist/domain/reconstructionObligationLedgerSchemas.js +45 -72
  424. package/dist/domain/reconstructionReadiness.js +1 -2
  425. package/dist/domain/reconstructionReadinessSchemas.js +66 -40
  426. package/dist/domain/reconstructionUnknowns.js +3 -3
  427. package/dist/domain/reconstructionVerification.js +13 -47
  428. package/dist/domain/reconstructionVerificationSchemas.js +50 -38
  429. package/dist/domain/referenceSourceGraph.js +53 -61
  430. package/dist/domain/referenceSourceImportParsing.js +3 -7
  431. package/dist/domain/replayMachine.js +19 -31
  432. package/dist/domain/replayMachineRun.js +15 -63
  433. package/dist/domain/replayMachineRuntime.js +46 -44
  434. package/dist/domain/replayMachineValues.js +84 -0
  435. package/dist/domain/residualUnknown.js +25 -30
  436. package/dist/domain/runtimeCharacterization.js +15 -16
  437. package/dist/domain/runtimeIdentification.js +48 -47
  438. package/dist/domain/sourceToBundleComparison.js +11 -87
  439. package/dist/domain/sourceToBundleComparisonSchemas.js +25 -50
  440. package/dist/domain/sourceToBundleSignals.js +11 -16
  441. package/dist/domain/staticRuntimeCorrelation.js +44 -54
  442. package/dist/domain/symbolAnalysis.js +10 -19
  443. package/dist/domain/unicodeCodePointOrder.js +12 -0
  444. package/dist/domain/webBundleAnalysis.js +70 -99
  445. package/dist/domain/webBundleAnalyzer.js +2 -4
  446. package/dist/domain/webBundleAnalyzerAst.js +0 -13
  447. package/dist/domain/webBundleAnalyzerInspection.js +26 -52
  448. package/dist/domain/webBundleAnalyzerResult.js +7 -24
  449. package/dist/domain/webCaptureDiff.js +48 -85
  450. package/dist/domain/webCaptureDiffSchemas.js +86 -0
  451. package/dist/domain/webContentArtifact.js +1 -10
  452. package/dist/domain/webMcpDiscovery.js +3 -14
  453. package/dist/domain/webScreenshot.js +58 -34
  454. package/dist/domain/zipPackageFormat.js +7 -0
  455. package/dist/dotnet/ManagedArtifactInspector.js +17 -50
  456. package/dist/dotnet/ManagedMemberInspector.js +27 -58
  457. package/dist/dotnet/ManagedMemberInspectorCore.js +14 -51
  458. package/dist/dotnet/ManagedMemberInstructionDecoder.js +2 -2
  459. package/dist/dotnet/ManagedMemberRows.js +16 -16
  460. package/dist/dotnet/ManagedMetadataHeaps.js +26 -8
  461. package/dist/dotnet/ManagedMetadataInventory.js +21 -30
  462. package/dist/dotnet/ManagedMetadataInventoryRows.js +57 -63
  463. package/dist/dotnet/ManagedMetadataLayout.js +3 -5
  464. package/dist/dotnet/ManagedMethodBodyReader.js +5 -30
  465. package/dist/dotnet/ManagedNativeBoundaryHelpers.js +19 -49
  466. package/dist/dotnet/ManagedNativeBoundaryInspector.js +13 -42
  467. package/dist/dotnet/ManagedPeReader.js +2 -2
  468. package/dist/dotnet/ManagedStaticProvider.js +13 -71
  469. package/dist/generatedMcpToolCatalog.js +1 -1
  470. package/dist/generatedPackageMetadata.js +1 -1
  471. package/dist/ghidra/GhidraAnalysisProfile.js +3 -8
  472. package/dist/ghidra/GhidraClient.js +5 -13
  473. package/dist/ghidra/GhidraClientStartup.js +1 -1
  474. package/dist/ghidra/GhidraClientWire.js +9 -5
  475. package/dist/ghidra/GhidraDefaults.js +0 -18
  476. package/dist/ghidra/GhidraDiagnostics.js +0 -2
  477. package/dist/ghidra/GhidraDoctor.js +16 -12
  478. package/dist/ghidra/GhidraFunctionValues.js +67 -108
  479. package/dist/ghidra/GhidraInstallation.js +98 -42
  480. package/dist/ghidra/GhidraInventoryValues.js +18 -77
  481. package/dist/ghidra/GhidraLauncher.js +0 -8
  482. package/dist/ghidra/GhidraProvider.js +32 -31
  483. package/dist/ghidra/GhidraProviderCapabilities.js +11 -48
  484. package/dist/ghidra/GhidraRequestQueue.js +6 -30
  485. package/dist/ghidra/GhidraResponseBuffer.js +1 -7
  486. package/dist/ghidra/GhidraSessionValues.js +0 -2
  487. package/dist/ghidra/GhidraSocketConnection.js +1 -1
  488. package/dist/ghidra/GhidraTransport.js +4 -7
  489. package/dist/ghidra/protocol.js +19 -42
  490. package/dist/hopper/BridgeLauncher.js +115 -37
  491. package/dist/hopper/HopperAnalysisProfile.js +3 -5
  492. package/dist/hopper/HopperCleanup.js +11 -9
  493. package/dist/hopper/HopperClient.js +5 -8
  494. package/dist/hopper/HopperProcessDiagnostic.js +2 -2
  495. package/dist/hopper/HopperProvider.js +0 -30
  496. package/dist/hopper/HopperRequestQueue.js +21 -40
  497. package/dist/hopper/HopperResponseStream.js +1 -9
  498. package/dist/hopper/HopperSessionValues.js +3 -2
  499. package/dist/hopper/HopperTargetLease.js +119 -0
  500. package/dist/hopper/LinuxPrivateDisplayDiagnostic.js +24 -31
  501. package/dist/hopper/LinuxPrivateDisplayProbe.js +21 -26
  502. package/dist/hopper/protocol.js +6 -4
  503. package/dist/main/reload.js +1 -9
  504. package/dist/main/shutdown.js +1 -1
  505. package/dist/main/state.js +0 -23
  506. package/dist/main/transport.js +27 -39
  507. package/dist/main.js +17 -15
  508. package/dist/mcpDoctor.js +27 -69
  509. package/dist/native/CommandRunner.js +18 -25
  510. package/dist/native/NativeMacOSProvider.js +13 -38
  511. package/dist/native/NativeMachoInspection.js +1 -1
  512. package/dist/process/BoundedFileBytes.js +17 -0
  513. package/dist/process/ExecFileOutput.js +11 -0
  514. package/dist/process/PendingOperations.js +8 -6
  515. package/dist/process/PrivateRuntimeRoot.js +17 -0
  516. package/dist/process/ProcessOwnership.js +67 -130
  517. package/dist/process/ProcessOwnershipIdentity.js +13 -0
  518. package/dist/process/ProcessOwnershipObservation.js +87 -0
  519. package/dist/process/ProcessOwnershipProcessTree.js +22 -0
  520. package/dist/process/ProviderDeadline.js +8 -12
  521. package/dist/process/ProviderProcess.js +7 -28
  522. package/dist/process/WindowsAuthority.js +32 -0
  523. package/dist/reference/ReferenceSourceReader.js +8 -24
  524. package/dist/reference/ReferenceSourceReaderEntries.js +11 -39
  525. package/dist/reference/ReferenceSourceReaderFile.js +13 -31
  526. package/dist/reference/ReferenceSourceReaderPaths.js +3 -18
  527. package/dist/reference/ReferenceSourceReaderValidate.js +3 -6
  528. package/dist/replay/JavaScriptReplayWorker.js +95 -13
  529. package/dist/replay/JavaScriptReplayWorkerTypes.js +1 -0
  530. package/dist/replay/LinuxJavaScriptReplayRunner.js +42 -43
  531. package/dist/replay/LinuxJavaScriptReplaySandbox.js +0 -19
  532. package/dist/replay/LinuxRuntimeClosure.js +1 -3
  533. package/dist/replay/ReplayOutcome.js +27 -18
  534. package/dist/replay/ReplayProcessLifecycle.js +32 -7
  535. package/dist/replay/ReplaySeccompFile.js +29 -0
  536. package/dist/replay/ReplayWorkerProtocol.js +33 -30
  537. package/dist/replay/SystemJavaScriptReplayHost.js +45 -74
  538. package/dist/server/ProcessCaptureElicitation.js +4 -8
  539. package/dist/server/createServer.js +145 -119
  540. package/dist/server/mcpClientMetadata.js +32 -0
  541. package/dist/server/promptCompletion.js +37 -61
  542. package/dist/server/recordDerivedEvidence.js +1 -1
  543. package/dist/server/registerApplicationTools/characterization.js +10 -21
  544. package/dist/server/registerApplicationTools/compareExportShapes.js +6 -16
  545. package/dist/server/registerApplicationTools/compareSourceToBundle.js +6 -15
  546. package/dist/server/registerApplicationTools/compareVersions.js +6 -16
  547. package/dist/server/registerApplicationTools/controlledReplay.js +8 -15
  548. package/dist/server/registerApplicationTools/coverage.js +7 -78
  549. package/dist/server/registerApplicationTools/helpers.js +1 -13
  550. package/dist/server/registerApplicationTools/obligationLedger.js +4 -8
  551. package/dist/server/registerApplicationTools/traceFeature.js +6 -15
  552. package/dist/server/registerApplicationTools/traceSemantics.js +5 -13
  553. package/dist/server/registerApplicationTools.js +0 -2
  554. package/dist/server/registerArtifactComparisonTool.js +27 -35
  555. package/dist/server/registerBrowserScenarioTool.js +3 -8
  556. package/dist/server/registerBrowserTools.js +36 -81
  557. package/dist/server/registerBundleComparisonTool.js +10 -16
  558. package/dist/server/registerCloseLifecycleTool.js +5 -27
  559. package/dist/server/registerElectronTools.js +29 -65
  560. package/dist/server/registerEnhancedTools.js +118 -127
  561. package/dist/server/registerEvidenceTools.js +19 -30
  562. package/dist/server/registerFunctionComparisonTool.js +35 -34
  563. package/dist/server/registerInvestigationTools/helpers.js +3 -32
  564. package/dist/server/registerInvestigationTools.js +36 -148
  565. package/dist/server/registerJavaScriptRuntimeObservationTools.js +15 -27
  566. package/dist/server/registerManagedWorkflowTools/compareManagedMembers.js +16 -23
  567. package/dist/server/registerManagedWorkflowTools/contract.js +2 -3
  568. package/dist/server/registerManagedWorkflowTools/evidence.js +19 -35
  569. package/dist/server/registerManagedWorkflowTools/importManagedReconstruction.js +4 -14
  570. package/dist/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.js +4 -14
  571. package/dist/server/registerManagedWorkflowTools/projectManagedApplicationGraph.js +11 -20
  572. package/dist/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.js +10 -21
  573. package/dist/server/registerOfficialTools.js +8 -51
  574. package/dist/server/registerProcessComparisonTool.js +43 -38
  575. package/dist/server/registerPrompts.js +19 -17
  576. package/dist/server/registerReplayMachineTool.js +4 -10
  577. package/dist/server/registerSessionRecordTools.js +36 -153
  578. package/dist/server/registerSessionStatusTool.js +18 -96
  579. package/dist/server/registerSessionTools.js +34 -91
  580. package/dist/server/sessionAvailabilityPolicy.js +2 -3
  581. package/dist/server/sessionEvidence.js +9 -15
  582. package/dist/server/sessionToolPolicies.js +1 -13
  583. package/dist/server/toolRegistrationOptions.js +4 -192
  584. package/dist/server/toolResult.js +15 -67
  585. package/dist/serverIdentity.js +0 -20
  586. package/install.sh +1 -1
  587. package/package.json +27 -15
  588. package/scripts/electron-active-hook-boundaries.cjs +394 -0
  589. package/scripts/electron-active-hook.cjs +469 -0
  590. package/scripts/hopper-demo-x11.py +13 -32
  591. package/scripts/rea.mjs +1 -11
  592. package/skills/reverse-engineer-anything/SKILL.md +46 -11
  593. package/skills/reverse-engineer-anything/references/evidence-workflows.md +6 -4
  594. package/skills/reverse-engineer-anything/references/javascript-applications.md +13 -13
  595. package/skills/reverse-engineer-anything/references/native-and-artifacts.md +12 -8
  596. package/dist/application/ApplicationWorkflowEvidenceResolver.js +0 -180
  597. package/dist/application/BoundedJsonFiles.js +0 -86
  598. package/dist/application/CrossVersionInventory.js +0 -128
  599. package/dist/application/CrossVersionInvestigation.js +0 -301
  600. package/dist/application/CrossVersionInvestigationCollections.js +0 -23
  601. package/dist/application/CrossVersionInvestigationEvidence.js +0 -64
  602. package/dist/application/CrossVersionInvestigationReplay.js +0 -170
  603. package/dist/application/DeferredFileAuthorization.js +0 -61
  604. package/dist/application/DoctorProjection.js +0 -43
  605. package/dist/application/EnhancedToolPagination.js +0 -22
  606. package/dist/application/EvidenceReferenceResolver.js +0 -26
  607. package/dist/application/InvestigationWorkspaceStore.js +0 -204
  608. package/dist/application/ProcessPairedExperiment.js +0 -72
  609. package/dist/application/ReconstructionCoverageWorkspaceStore.js +0 -31
  610. package/dist/application/ReconstructionReadinessService.js +0 -48
  611. package/dist/cliInvestigationCommands.js +0 -173
  612. package/dist/domain/boundedCartesianProjection.js +0 -15
  613. package/dist/domain/investigationWorkspace.js +0 -346
  614. package/dist/domain/jsonLimits.js +0 -26
  615. package/dist/domain/knownPageCoverage.js +0 -21
  616. package/dist/domain/processPairedExperiment.js +0 -128
  617. package/dist/server/DynamicToolAvailability.js +0 -70
  618. package/dist/server/LazyToolCatalog.js +0 -134
  619. package/dist/server/hydrateServerTools.js +0 -191
  620. package/dist/server/javascriptApplicationResult.js +0 -106
  621. package/dist/server/permissionFailure.js +0 -12
  622. package/dist/server/registerApplicationTools/readiness.js +0 -55
  623. package/dist/server/registerEvidenceResources.js +0 -315
  624. package/dist/server/registerJavaScriptApplicationGraphResource.js +0 -65
  625. package/dist/server/registerReconstructionObligationLedgerResource.js +0 -32
  626. package/dist/server/registerReconstructionReadinessResource.js +0 -32
  627. package/dist/server/toolInputValidation.js +0 -77
  628. package/scripts/package-runner-bootstrap.mjs +0 -72
@@ -1,13 +1,6 @@
1
1
  import { metadataRowOffset, } from "./ManagedMetadataLayout.js";
2
- import { MetadataRowCursor, metadataToken, readMetadataBlob, readMetadataGuid, readMetadataString, sha256Bytes, strongNameToken, } from "./ManagedMetadataHeaps.js";
2
+ import { metadataRowCursor, metadataCodedToken, metadataToken, readMetadataBlob, readMetadataGuid, readMetadataString, sha256Bytes, strongNameToken, } from "./ManagedMetadataHeaps.js";
3
3
  import { managedFailure } from "./ManagedReaderFailure.js";
4
- const rowCursor = ({ bytes, layout, table, row, }) => {
5
- const descriptor = layout.table(table);
6
- const start = metadataRowOffset(layout, table, row);
7
- if (descriptor === undefined)
8
- throw managedFailure("invalid-row", `metadata.${String(table)}`, "Metadata table is absent", start);
9
- return new MetadataRowCursor(bytes, start, start + descriptor.rowSize, `metadata.${descriptor.name}`);
10
- };
11
4
  const publicKeyIdentity = (bytes, kind) => ({
12
5
  kind: bytes.length === 0 ? "none" : kind,
13
6
  byte_length: bytes.length,
@@ -20,13 +13,13 @@ const publicKeyIdentity = (bytes, kind) => ({
20
13
  ? bytes.toString("hex")
21
14
  : null,
22
15
  });
23
- export const readModule = (bytes, layout, maxBytes) => {
16
+ export const readModule = (bytes, layout, heapExtent) => {
24
17
  const table = layout.table(0);
25
18
  if (table === undefined || table.rowCount === 0)
26
19
  return null;
27
- const cursor = rowCursor({ bytes, layout, table: 0, row: 1 });
20
+ const cursor = metadataRowCursor(bytes, layout, 0, 1);
28
21
  const generation = cursor.readUInt16();
29
- const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), maxBytes);
22
+ const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), heapExtent);
30
23
  const mvid = readMetadataGuid(bytes, layout, cursor.readIndex(layout.guidIndexSize));
31
24
  const encId = readMetadataGuid(bytes, layout, cursor.readIndex(layout.guidIndexSize));
32
25
  const encBaseId = readMetadataGuid(bytes, layout, cursor.readIndex(layout.guidIndexSize));
@@ -40,11 +33,11 @@ export const readModule = (bytes, layout, maxBytes) => {
40
33
  row_offset: table.offset,
41
34
  };
42
35
  };
43
- export const readAssembly = (bytes, layout, maxBytes) => {
36
+ export const readAssembly = (bytes, layout, heapExtent) => {
44
37
  const table = layout.table(32);
45
38
  if (table === undefined || table.rowCount === 0)
46
39
  return null;
47
- const cursor = rowCursor({ bytes, layout, table: 32, row: 1 });
40
+ const cursor = metadataRowCursor(bytes, layout, 32, 1);
48
41
  const hashAlgorithm = cursor.readUInt32();
49
42
  const version = [
50
43
  cursor.readUInt16(),
@@ -53,9 +46,9 @@ export const readAssembly = (bytes, layout, maxBytes) => {
53
46
  cursor.readUInt16(),
54
47
  ].join(".");
55
48
  const flags = cursor.readUInt32();
56
- const key = readMetadataBlob(bytes, layout, cursor.readIndex(layout.blobIndexSize), maxBytes);
57
- const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), maxBytes);
58
- const culture = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), maxBytes);
49
+ const key = readMetadataBlob(bytes, layout, cursor.readIndex(layout.blobIndexSize), heapExtent);
50
+ const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), heapExtent);
51
+ const culture = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), heapExtent);
59
52
  return {
60
53
  name,
61
54
  version,
@@ -67,8 +60,8 @@ export const readAssembly = (bytes, layout, maxBytes) => {
67
60
  row_offset: table.offset,
68
61
  };
69
62
  };
70
- export const readAssemblyReference = (bytes, layout, row, maxBytes) => {
71
- const cursor = rowCursor({ bytes, layout, table: 35, row });
63
+ export const readAssemblyReference = (bytes, layout, row, heapExtent) => {
64
+ const cursor = metadataRowCursor(bytes, layout, 35, row);
72
65
  const version = [
73
66
  cursor.readUInt16(),
74
67
  cursor.readUInt16(),
@@ -76,10 +69,10 @@ export const readAssemblyReference = (bytes, layout, row, maxBytes) => {
76
69
  cursor.readUInt16(),
77
70
  ].join(".");
78
71
  const flags = cursor.readUInt32();
79
- const keyOrToken = readMetadataBlob(bytes, layout, cursor.readIndex(layout.blobIndexSize), maxBytes);
80
- const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), maxBytes);
81
- const culture = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), maxBytes);
82
- const hashValue = readMetadataBlob(bytes, layout, cursor.readIndex(layout.blobIndexSize), maxBytes);
72
+ const keyOrToken = readMetadataBlob(bytes, layout, cursor.readIndex(layout.blobIndexSize), heapExtent);
73
+ const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), heapExtent);
74
+ const culture = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), heapExtent);
75
+ const hashValue = readMetadataBlob(bytes, layout, cursor.readIndex(layout.blobIndexSize), heapExtent);
83
76
  return {
84
77
  name,
85
78
  version,
@@ -92,34 +85,26 @@ export const readAssemblyReference = (bytes, layout, row, maxBytes) => {
92
85
  row_offset: metadataRowOffset(layout, 35, row),
93
86
  };
94
87
  };
95
- const codedToken = (raw, bits, tables) => {
96
- if (raw === 0)
97
- return null;
98
- const tag = raw & (2 ** bits - 1);
99
- const row = Math.floor(raw / 2 ** bits);
100
- const table = tables[tag];
101
- return table === undefined || row === 0 ? null : metadataToken(table, row);
102
- };
103
- const readTypeName = ({ bytes, layout, table, row, maxBytes, }) => {
88
+ const readTypeName = ({ bytes, layout, table, row, heapExtent, }) => {
104
89
  const descriptor = layout.table(table);
105
90
  if (descriptor === undefined || row < 1 || row > descriptor.rowCount)
106
91
  return null;
107
- const cursor = rowCursor({ bytes, layout, table, row });
92
+ const cursor = metadataRowCursor(bytes, layout, table, row);
108
93
  if (table === 1)
109
94
  cursor.readIndex(layout.codedIndexSize("ResolutionScope"));
110
95
  else
111
96
  cursor.readUInt32();
112
- const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), maxBytes);
113
- const namespace = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), maxBytes);
97
+ const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), heapExtent);
98
+ const namespace = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), heapExtent);
114
99
  return namespace.length === 0 ? name : `${namespace}.${name}`;
115
100
  };
116
- const declaringTypeForMethod = (bytes, layout, methodRow, maxBytes) => {
101
+ const declaringTypeForMethod = (bytes, layout, methodRow, heapExtent) => {
117
102
  const types = layout.table(2);
118
103
  const methods = layout.table(6);
119
104
  if (types === undefined || methods === undefined)
120
105
  return null;
121
106
  for (let row = 1; row <= types.rowCount; row += 1) {
122
- const cursor = rowCursor({ bytes, layout, table: 2, row });
107
+ const cursor = metadataRowCursor(bytes, layout, 2, row);
123
108
  cursor.readUInt32();
124
109
  const nameIndex = cursor.readIndex(layout.stringIndexSize);
125
110
  const namespaceIndex = cursor.readIndex(layout.stringIndexSize);
@@ -131,14 +116,14 @@ const declaringTypeForMethod = (bytes, layout, methodRow, maxBytes) => {
131
116
  : methodListForType(bytes, layout, row + 1);
132
117
  if (methodRow < methodStart || methodRow >= methodEnd)
133
118
  continue;
134
- const name = readMetadataString(bytes, layout, nameIndex, maxBytes);
135
- const namespace = readMetadataString(bytes, layout, namespaceIndex, maxBytes);
119
+ const name = readMetadataString(bytes, layout, nameIndex, heapExtent);
120
+ const namespace = readMetadataString(bytes, layout, namespaceIndex, heapExtent);
136
121
  return namespace.length === 0 ? name : `${namespace}.${name}`;
137
122
  }
138
123
  return null;
139
124
  };
140
125
  const methodListForType = (bytes, layout, row) => {
141
- const cursor = rowCursor({ bytes, layout, table: 2, row });
126
+ const cursor = metadataRowCursor(bytes, layout, 2, row);
142
127
  cursor.readUInt32();
143
128
  cursor.readIndex(layout.stringIndexSize);
144
129
  cursor.readIndex(layout.stringIndexSize);
@@ -146,28 +131,40 @@ const methodListForType = (bytes, layout, row) => {
146
131
  cursor.readIndex(layout.tableIndexSize(4));
147
132
  return cursor.readIndex(layout.tableIndexSize(6));
148
133
  };
149
- const attributeTypeName = (bytes, layout, rawType, maxBytes) => {
134
+ const attributeTypeName = (bytes, layout, rawType, heapExtent) => {
150
135
  const tag = rawType & 7;
151
136
  const row = Math.floor(rawType / 8);
152
137
  if (row === 0)
153
138
  return null;
154
139
  if (tag === 2)
155
- return declaringTypeForMethod(bytes, layout, row, maxBytes);
140
+ return declaringTypeForMethod(bytes, layout, row, heapExtent);
156
141
  if (tag !== 3)
157
142
  return null;
158
143
  const memberRefs = layout.table(10);
159
144
  if (memberRefs === undefined || row > memberRefs.rowCount)
160
145
  return null;
161
- const cursor = rowCursor({ bytes, layout, table: 10, row });
146
+ const cursor = metadataRowCursor(bytes, layout, 10, row);
162
147
  const parent = cursor.readIndex(layout.codedIndexSize("MemberRefParent"));
163
148
  const parentTag = parent & 7;
164
149
  const parentRow = Math.floor(parent / 8);
165
150
  if (parentTag === 0)
166
- return readTypeName({ bytes, layout, table: 2, row: parentRow, maxBytes });
151
+ return readTypeName({
152
+ bytes,
153
+ layout,
154
+ table: 2,
155
+ row: parentRow,
156
+ heapExtent,
157
+ });
167
158
  if (parentTag === 1)
168
- return readTypeName({ bytes, layout, table: 1, row: parentRow, maxBytes });
159
+ return readTypeName({
160
+ bytes,
161
+ layout,
162
+ table: 1,
163
+ row: parentRow,
164
+ heapExtent,
165
+ });
169
166
  if (parentTag === 3)
170
- return declaringTypeForMethod(bytes, layout, parentRow, maxBytes);
167
+ return declaringTypeForMethod(bytes, layout, parentRow, heapExtent);
171
168
  return null;
172
169
  };
173
170
  const decodeCompressedLength = (blob, offset) => {
@@ -210,21 +207,26 @@ const decodeFixedString = (blob) => {
210
207
  return null;
211
208
  }
212
209
  };
213
- export const readCustomAttribute = (bytes, layout, row, maxBytes) => {
214
- const cursor = rowCursor({ bytes, layout, table: 12, row });
210
+ export const readCustomAttribute = (bytes, layout, row, heapExtent) => {
211
+ const cursor = metadataRowCursor(bytes, layout, 12, row);
215
212
  const parentRaw = cursor.readIndex(layout.codedIndexSize("HasCustomAttribute"));
216
213
  const typeRaw = cursor.readIndex(layout.codedIndexSize("CustomAttributeType"));
217
- const value = readMetadataBlob(bytes, layout, cursor.readIndex(layout.blobIndexSize), maxBytes);
218
- const parent = codedToken(parentRaw, 5, [
214
+ const value = readMetadataBlob(bytes, layout, cursor.readIndex(layout.blobIndexSize), heapExtent);
215
+ const parent = metadataCodedToken(parentRaw, 5, [
219
216
  6, 4, 1, 2, 8, 9, 10, 0, 14, 23, 20, 17, 26, 27, 32, 35, 38, 39, 40, 42,
220
217
  44, 43,
221
218
  ]);
222
219
  if (parent === null)
223
220
  throw managedFailure("invalid-row", "metadata.CustomAttribute", "CustomAttribute parent coded index is invalid", cursor.start);
224
- const typeName = attributeTypeName(bytes, layout, typeRaw, maxBytes);
221
+ const typeName = attributeTypeName(bytes, layout, typeRaw, heapExtent);
225
222
  return {
226
223
  parent_token: parent,
227
- constructor_token: codedToken(typeRaw, 3, [undefined, undefined, 6, 10]),
224
+ constructor_token: metadataCodedToken(typeRaw, 3, [
225
+ undefined,
226
+ undefined,
227
+ 6,
228
+ 10,
229
+ ]),
228
230
  type_name: typeName,
229
231
  value_length: value.length,
230
232
  value_sha256: sha256Bytes(value),
@@ -235,13 +237,13 @@ export const readCustomAttribute = (bytes, layout, row, maxBytes) => {
235
237
  row_offset: cursor.start,
236
238
  };
237
239
  };
238
- export const readResource = ({ bytes, layout, row, maxBytes, directory, issues, }) => {
239
- const cursor = rowCursor({ bytes, layout, table: 40, row });
240
+ export const readResource = ({ bytes, layout, row, directory, issues, }) => {
241
+ const cursor = metadataRowCursor(bytes, layout, 40, row);
240
242
  const declaredOffset = cursor.readUInt32();
241
243
  const flags = cursor.readUInt32();
242
- const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), maxBytes);
244
+ const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), Math.max(layout.strings.size, layout.blob.size));
243
245
  const implementationRaw = cursor.readIndex(layout.codedIndexSize("Implementation"));
244
- const implementationToken = codedToken(implementationRaw, 2, [38, 35, 39]);
246
+ const implementationToken = metadataCodedToken(implementationRaw, 2, [38, 35, 39]);
245
247
  let dataLength = null;
246
248
  let dataSha256 = null;
247
249
  if (implementationRaw === 0) {
@@ -264,14 +266,6 @@ export const readResource = ({ bytes, layout, row, maxBytes, directory, issues,
264
266
  detail: "Embedded resource length leaves the CLI resources directory",
265
267
  });
266
268
  }
267
- else if (dataLength > maxBytes) {
268
- issues.push({
269
- code: "limit-exceeded",
270
- scope: `metadata.ManifestResource:${metadataToken(40, row)}`,
271
- offset: start + 4,
272
- detail: `Embedded resource exceeds max_heap_item_bytes ${String(maxBytes)}; digest omitted`,
273
- });
274
- }
275
269
  else {
276
270
  dataSha256 = sha256Bytes(bytes.subarray(start + 4, start + 4 + dataLength));
277
271
  }
@@ -166,7 +166,7 @@ const readTablesHeader = (bytes, streams) => {
166
166
  throw managedFailure("invalid-tables", "metadata.valid-mask", "Metadata valid mask names unsupported tables outside the admitted ECMA-335 range", tablesStream.offset + 8);
167
167
  return { tableBytes, tablesOffset: tablesStream.offset, heaps, valid };
168
168
  };
169
- const readRowCounts = (tableBytes, valid, maxTableRows, tablesOffset) => {
169
+ const readRowCounts = (tableBytes, valid) => {
170
170
  const rowCounts = Array(METADATA_TABLE_NAMES.length).fill(0);
171
171
  let tableCursor = 24;
172
172
  for (let index = 0; index < METADATA_TABLE_NAMES.length; index += 1) {
@@ -174,8 +174,6 @@ const readRowCounts = (tableBytes, valid, maxTableRows, tablesOffset) => {
174
174
  continue;
175
175
  requireRange(tableBytes, tableCursor, 4, "metadata.table-row-count");
176
176
  const count = tableBytes.readUInt32LE(tableCursor);
177
- if (count > maxTableRows)
178
- throw managedFailure("limit-exceeded", `metadata.${METADATA_TABLE_NAMES[index] ?? String(index)}`, `Metadata table row count ${String(count)} exceeds max_table_rows ${String(maxTableRows)}`, tablesOffset + tableCursor);
179
177
  rowCounts[index] = count;
180
178
  tableCursor += 4;
181
179
  }
@@ -218,13 +216,13 @@ const buildMetadataTables = ({ tableBytes, rowCounts, heaps, valid, tablesOffset
218
216
  return tables;
219
217
  };
220
218
  /** Parse ECMA-335 stream and table layout with checked byte extents. */
221
- export const readManagedMetadataLayout = (artifact, rootOffset, size, maxTableRows) => {
219
+ export const readManagedMetadataLayout = (artifact, rootOffset, size) => {
222
220
  if (size < 20 || rootOffset < 0 || rootOffset > artifact.length - size)
223
221
  throw managedFailure("invalid-metadata-root", "metadata.root", "CLI metadata directory leaves the artifact byte range", rootOffset);
224
222
  const bytes = artifact.subarray(rootOffset, rootOffset + size);
225
223
  const { streams, version } = readMetadataStreams(bytes, rootOffset);
226
224
  const { tableBytes, tablesOffset, heaps, valid } = readTablesHeader(artifact, streams);
227
- const rowCounts = readRowCounts(tableBytes, valid, maxTableRows, tablesOffset);
225
+ const rowCounts = readRowCounts(tableBytes, valid);
228
226
  const tables = buildMetadataTables({
229
227
  tableBytes,
230
228
  rowCounts,
@@ -31,28 +31,24 @@ const readMethodBodyHeader = (bytes, offset) => {
31
31
  localSig: bytes.readUInt32LE(offset + 8),
32
32
  };
33
33
  };
34
- export const methodBody = (bytes, pe, rva, limits) => {
34
+ export const methodBody = (bytes, pe, rva) => {
35
35
  if (rva === 0)
36
36
  return emptyMethodBody(rva, "absent", null);
37
37
  try {
38
38
  const offset = pe.rvaToOffset(rva, 1, "method.body");
39
39
  const header = readMethodBodyHeader(bytes, offset);
40
- if (header.ilSize > limits.maxMethodBodyBytes)
41
- return oversizedMethodBody(header, rva, offset, limits);
42
40
  const ilOffset = offset + header.size;
43
41
  if (ilOffset > bytes.length - header.ilSize)
44
42
  throw new RangeError("Method IL bytes leave artifact");
45
43
  const il = bytes.subarray(ilOffset, ilOffset + header.ilSize);
46
- const decoded = decodeInstructions(il, limits.maxMethodInstructions);
44
+ const decoded = decodeInstructions(il);
47
45
  const opcodeCounts = {};
48
46
  for (const instruction of decoded.parsed)
49
47
  opcodeCounts[instruction.opcode] =
50
48
  (opcodeCounts[instruction.opcode] ?? 0) + 1;
51
49
  const anchors = decoded.parsed
52
- .map((instruction, index) => ({ instruction, index }))
53
- .filter(({ instruction }) => instruction.operandKind !== "none")
54
- .slice(0, limits.instructionAnchorLimit)
55
- .map(({ instruction }) => ({
50
+ .filter((instruction) => instruction.operandKind !== "none")
51
+ .map((instruction) => ({
56
52
  il_offset: instruction.offset,
57
53
  opcode: instruction.opcode,
58
54
  operand_kind: instruction.operandKind,
@@ -93,7 +89,7 @@ export const methodBody = (bytes, pe, rva, limits) => {
93
89
  : [],
94
90
  issue: decoded.issue ??
95
91
  (decoded.truncated > 0
96
- ? `Instruction decode reached max_method_instructions ${String(limits.maxMethodInstructions)} before the end of the method body`
92
+ ? "Instruction decoding stopped before the end of the method body"
97
93
  : null),
98
94
  };
99
95
  }
@@ -120,24 +116,3 @@ const emptyMethodBody = (rva, status, issue) => ({
120
116
  exception_regions: [],
121
117
  issue,
122
118
  });
123
- const oversizedMethodBody = (header, rva, offset, limits) => ({
124
- status: "too-large",
125
- header_format: header.format,
126
- rva,
127
- file_offset: offset,
128
- max_stack: header.maxStack,
129
- init_locals: (header.flags & 0x10) !== 0,
130
- local_var_sig_token: header.localSig === 0
131
- ? null
132
- : `0x${header.localSig.toString(16).padStart(8, "0")}`,
133
- il_size: header.ilSize,
134
- il_sha256: null,
135
- normalized_il_sha256: null,
136
- instruction_count: 0,
137
- decoded_instruction_count: 0,
138
- truncated_instructions: 0,
139
- opcode_counts: {},
140
- anchors: [],
141
- exception_regions: [],
142
- issue: `Method body exceeds max_method_body_bytes ${String(limits.maxMethodBodyBytes)}`,
143
- });
@@ -1,57 +1,28 @@
1
1
  import { managedNativeBoundaryInspectionSchema, } from "../domain/managedArtifact.js";
2
- import { metadataRowOffset, } from "./ManagedMetadataLayout.js";
3
- import { MetadataRowCursor, metadataToken, readMetadataString, } from "./ManagedMetadataHeaps.js";
2
+ import {} from "./ManagedMetadataLayout.js";
3
+ import { metadataRowCursor, metadataCodedToken, metadataToken, readMetadataString, } from "./ManagedMetadataHeaps.js";
4
4
  import { managedTableRowCounts } from "./ManagedMetadataInventory.js";
5
- import { managedFailure } from "./ManagedReaderFailure.js";
6
- const rowCursor = ({ bytes, layout, table, row, }) => {
7
- const descriptor = layout.table(table);
8
- const start = metadataRowOffset(layout, table, row);
9
- if (descriptor === undefined)
10
- throw managedFailure("invalid-row", `metadata.${String(table)}`, "Metadata table is absent", start);
11
- return new MetadataRowCursor(bytes, start, start + descriptor.rowSize, `metadata.${descriptor.name}`);
12
- };
13
- const codedToken = (raw, tagBits, tables) => {
14
- const tagMask = (1 << tagBits) - 1;
15
- const table = tables[raw & tagMask];
16
- const row = raw >> tagBits;
17
- if (table === undefined || row === 0)
18
- return null;
19
- return metadataToken(table, row);
20
- };
21
5
  const flagsHex = (value) => `0x${value.toString(16).padStart(4, "0")}`;
22
- const page = (items, offset, limit) => {
23
- const safeOffset = Math.min(offset, items.length);
24
- const selected = items.slice(safeOffset, safeOffset + limit);
25
- return {
26
- items: selected,
27
- offset,
28
- limit,
29
- total: items.length,
30
- returned: selected.length,
31
- dropped: Math.max(0, items.length - safeOffset - selected.length),
32
- complete: safeOffset === 0 && selected.length === items.length,
33
- };
34
- };
35
- export const parseModuleRefs = (bytes, layout, maxBytes) => {
6
+ export const parseModuleRefs = (bytes, layout, heapExtent) => {
36
7
  const refs = [];
37
8
  const table = layout.table(26);
38
9
  for (let row = 1; row <= (table?.rowCount ?? 0); row += 1) {
39
- const cursor = rowCursor({ bytes, layout, table: 26, row });
10
+ const cursor = metadataRowCursor(bytes, layout, 26, row);
40
11
  refs.push({
41
12
  token: metadataToken(26, row),
42
13
  row_offset: cursor.start,
43
- name: readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), maxBytes),
14
+ name: readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), heapExtent),
44
15
  });
45
16
  }
46
17
  return refs;
47
18
  };
48
- export const parseFields = (bytes, layout, maxBytes) => {
19
+ export const parseFields = (bytes, layout, heapExtent) => {
49
20
  const fields = new Map();
50
21
  const table = layout.table(4);
51
22
  for (let row = 1; row <= (table?.rowCount ?? 0); row += 1) {
52
- const cursor = rowCursor({ bytes, layout, table: 4, row });
23
+ const cursor = metadataRowCursor(bytes, layout, 4, row);
53
24
  const flags = cursor.readUInt16();
54
- const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), maxBytes);
25
+ const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), heapExtent);
55
26
  cursor.readIndex(layout.blobIndexSize);
56
27
  const token = metadataToken(4, row);
57
28
  fields.set(token, {
@@ -66,15 +37,15 @@ export const parseFields = (bytes, layout, maxBytes) => {
66
37
  }
67
38
  return fields;
68
39
  };
69
- export const parseMethods = (bytes, layout, maxBytes) => {
40
+ export const parseMethods = (bytes, layout, heapExtent) => {
70
41
  const methods = new Map();
71
42
  const table = layout.table(6);
72
43
  for (let row = 1; row <= (table?.rowCount ?? 0); row += 1) {
73
- const cursor = rowCursor({ bytes, layout, table: 6, row });
44
+ const cursor = metadataRowCursor(bytes, layout, 6, row);
74
45
  const rva = cursor.readUInt32();
75
46
  const implFlags = cursor.readUInt16();
76
47
  const flags = cursor.readUInt16();
77
- const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), maxBytes);
48
+ const name = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), heapExtent);
78
49
  cursor.readIndex(layout.blobIndexSize);
79
50
  cursor.readIndex(layout.tableIndexSize(8));
80
51
  const token = metadataToken(6, row);
@@ -90,15 +61,15 @@ export const parseMethods = (bytes, layout, maxBytes) => {
90
61
  }
91
62
  return methods;
92
63
  };
93
- export const parseImplMaps = ({ bytes, layout, maxBytes, modules, members, }) => {
64
+ export const parseImplMaps = ({ bytes, layout, heapExtent, modules, members, }) => {
94
65
  const moduleNames = new Map(modules.map((module) => [module.token, module]));
95
66
  const imports = [];
96
67
  const table = layout.table(28);
97
68
  for (let row = 1; row <= (table?.rowCount ?? 0); row += 1) {
98
- const cursor = rowCursor({ bytes, layout, table: 28, row });
69
+ const cursor = metadataRowCursor(bytes, layout, 28, row);
99
70
  const mappingFlags = cursor.readUInt16();
100
- const memberToken = codedToken(cursor.readIndex(layout.codedIndexSize("MemberForwarded")), 1, [4, 6]);
101
- const importName = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), maxBytes);
71
+ const memberToken = metadataCodedToken(cursor.readIndex(layout.codedIndexSize("MemberForwarded")), 1, [4, 6]);
72
+ const importName = readMetadataString(bytes, layout, cursor.readIndex(layout.stringIndexSize), heapExtent);
102
73
  const importScopeRow = cursor.readIndex(layout.tableIndexSize(26));
103
74
  const importScopeToken = importScopeRow === 0 ? null : metadataToken(26, importScopeRow);
104
75
  const member = memberToken === null ? undefined : members.get(memberToken);
@@ -267,8 +238,7 @@ export const cliNative = (pe) => {
267
238
  managed_native_header_size: pe.cli.managedNativeHeader.size,
268
239
  };
269
240
  };
270
- export const buildNativeBoundaryInspection = ({ target, bytes, limits, layout, inventory, moduleRefs, imports, implementations, native, issues, }) => managedNativeBoundaryInspectionSchema.parse({
271
- schema_version: 1,
241
+ export const buildNativeBoundaryInspection = ({ target, bytes, layout, inventory, moduleRefs, imports, implementations, native, issues, }) => managedNativeBoundaryInspectionSchema.parse({
272
242
  artifact: {
273
243
  path: target.path,
274
244
  sha256: target.sha256,
@@ -287,9 +257,9 @@ export const buildNativeBoundaryInspection = ({ target, bytes, limits, layout, i
287
257
  requires_mvid: inventory.module?.mvid ?? null,
288
258
  },
289
259
  cli_native: native,
290
- module_refs: page(moduleRefs, limits.moduleRefOffset, limits.moduleRefLimit),
291
- pinvoke_imports: page(imports, limits.importOffset, limits.importLimit),
292
- native_implementations: page(implementations, limits.implementationOffset, limits.implementationLimit),
260
+ module_refs: moduleRefs,
261
+ pinvoke_imports: imports,
262
+ native_implementations: implementations,
293
263
  summary: {
294
264
  module_ref_count: moduleRefs.length,
295
265
  pinvoke_import_count: imports.length,
@@ -4,17 +4,7 @@ import { readManagedMetadataLayout, } from "./ManagedMetadataLayout.js";
4
4
  import { readManagedPeLayout, } from "./ManagedPeReader.js";
5
5
  import { ManagedReaderFailure } from "./ManagedReaderFailure.js";
6
6
  import { buildNativeBoundaryInspection, cliNative, nativeImplementations, parseFields, parseImplMaps, parseMethods, parseModuleRefs, } from "./ManagedNativeBoundaryHelpers.js";
7
- const emptyPage = () => ({
8
- items: [],
9
- offset: 0,
10
- limit: 0,
11
- total: 0,
12
- returned: 0,
13
- dropped: 0,
14
- complete: true,
15
- });
16
7
  const emptyInspection = (target, bytes, classification, issues = []) => managedNativeBoundaryInspectionSchema.parse({
17
- schema_version: 1,
18
8
  artifact: {
19
9
  path: target.path,
20
10
  sha256: target.sha256,
@@ -43,9 +33,9 @@ const emptyInspection = (target, bytes, classification, issues = []) => managedN
43
33
  managed_native_header_rva: 0,
44
34
  managed_native_header_size: 0,
45
35
  },
46
- module_refs: emptyPage(),
47
- pinvoke_imports: emptyPage(),
48
- native_implementations: emptyPage(),
36
+ module_refs: [],
37
+ pinvoke_imports: [],
38
+ native_implementations: [],
49
39
  summary: {
50
40
  module_ref_count: 0,
51
41
  pinvoke_import_count: 0,
@@ -59,33 +49,18 @@ const emptyInspection = (target, bytes, classification, issues = []) => managedN
59
49
  "Static inspection does not load or execute target code, so native export resolution is not performed.",
60
50
  ],
61
51
  });
62
- const readBoundaryInventory = (bytes, pe, limits) => {
63
- const cli = pe.cli;
52
+ const readBoundaryInventory = (bytes, pe, cli) => {
64
53
  const metadataOffset = pe.rvaToOffset(cli.metadata.rva, cli.metadata.size, "cli.metadata");
65
- const layout = readManagedMetadataLayout(bytes, metadataOffset, cli.metadata.size, limits.maxTableRows);
54
+ const layout = readManagedMetadataLayout(bytes, metadataOffset, cli.metadata.size);
66
55
  const resourceDirectory = {
67
56
  offset: pe.rvaToOffset(cli.resources.rva, cli.resources.size, "cli.resources"),
68
57
  size: cli.resources.size,
69
58
  };
70
- const inventory = readManagedMetadataInventory(bytes, layout, {
71
- referenceOffset: 0,
72
- referenceLimit: 0,
73
- resourceOffset: 0,
74
- resourceLimit: 0,
75
- attributeOffset: 0,
76
- attributeLimit: 0,
77
- maxHeapItemBytes: limits.maxHeapItemBytes,
78
- }, resourceDirectory);
59
+ const inventory = readManagedMetadataInventory(bytes, layout, resourceDirectory);
79
60
  return { layout, inventory };
80
61
  };
81
- const metadataLimitIssue = (cli, maxBytes) => ({
82
- code: "limit-exceeded",
83
- scope: "cli.metadata",
84
- offset: cli.headerOffset + 8,
85
- detail: `CLI metadata size exceeds max_metadata_bytes ${String(maxBytes)}`,
86
- });
87
62
  /** Inspect managed/native boundary declarations from PE metadata without execution. */
88
- export const inspectManagedNativeBoundariesBytes = (bytes, target, limits) => {
63
+ export const inspectManagedNativeBoundariesBytes = (bytes, target) => {
89
64
  let pe;
90
65
  try {
91
66
  pe = readManagedPeLayout(bytes);
@@ -97,29 +72,26 @@ export const inspectManagedNativeBoundariesBytes = (bytes, target, limits) => {
97
72
  }
98
73
  if (pe.cli === null)
99
74
  return emptyInspection(target, bytes, pe.cliDirectoryPresent ? "malformed" : "not-managed", pe.cliIssue === null ? [] : [pe.cliIssue]);
100
- if (pe.cli.metadata.size > limits.maxMetadataBytes)
101
- return emptyInspection(target, bytes, "malformed", [
102
- metadataLimitIssue(pe.cli, limits.maxMetadataBytes),
103
- ]);
104
75
  let layout;
105
76
  let inventory;
106
77
  try {
107
- ({ layout, inventory } = readBoundaryInventory(bytes, pe, limits));
78
+ ({ layout, inventory } = readBoundaryInventory(bytes, pe, pe.cli));
108
79
  }
109
80
  catch (cause) {
110
81
  if (!(cause instanceof ManagedReaderFailure))
111
82
  throw cause;
112
83
  return emptyInspection(target, bytes, "malformed", [cause.issue]);
113
84
  }
114
- const moduleRefs = parseModuleRefs(bytes, layout, limits.maxHeapItemBytes);
85
+ const heapExtent = Math.max(layout.strings.size, layout.blob.size);
86
+ const moduleRefs = parseModuleRefs(bytes, layout, heapExtent);
115
87
  const members = new Map([
116
- ...parseFields(bytes, layout, limits.maxHeapItemBytes),
117
- ...parseMethods(bytes, layout, limits.maxHeapItemBytes),
88
+ ...parseFields(bytes, layout, heapExtent),
89
+ ...parseMethods(bytes, layout, heapExtent),
118
90
  ]);
119
91
  const imports = parseImplMaps({
120
92
  bytes,
121
93
  layout,
122
- maxBytes: limits.maxHeapItemBytes,
94
+ heapExtent,
123
95
  modules: moduleRefs,
124
96
  members,
125
97
  });
@@ -130,7 +102,6 @@ export const inspectManagedNativeBoundariesBytes = (bytes, target, limits) => {
130
102
  return buildNativeBoundaryInspection({
131
103
  target,
132
104
  bytes,
133
- limits,
134
105
  pe,
135
106
  layout,
136
107
  inventory,
@@ -104,8 +104,8 @@ const readCoffHeader = (bytes) => {
104
104
  const coff = peOffset + 4;
105
105
  const machine = bytes.readUInt16LE(coff);
106
106
  const sectionCount = bytes.readUInt16LE(coff + 2);
107
- if (sectionCount === 0 || sectionCount > 96)
108
- throw managedFailure("invalid-directory", "pe.sections", "PE section count is outside the admitted range", coff + 2);
107
+ if (sectionCount === 0)
108
+ throw managedFailure("invalid-directory", "pe.sections", "PE section count must be positive", coff + 2);
109
109
  const optionalSize = bytes.readUInt16LE(coff + 16);
110
110
  const characteristics = bytes.readUInt16LE(coff + 18);
111
111
  return { coff, machine, sectionCount, optionalSize, characteristics };