diff options
| author | Jordan Wiens <jordan@psifertex.com> | 2024-11-18 13:04:21 -0500 |
|---|---|---|
| committer | Jordan Wiens <jordan@psifertex.com> | 2024-11-18 13:04:21 -0500 |
| commit | 216be8e4708dc59bbdf2063199ce98cea701e923 (patch) | |
| tree | 019d9b23ac5c4e41aad988282af263dd65a878d2 | |
| parent | e6ff8588fb8a283b87a23ff5e1999dc576f9bf6b (diff) | |
fix more invalid documentation urls
| -rw-r--r-- | docs/dev/workflows.md | 48 | ||||
| -rw-r--r-- | docs/guide/types/index.md | 2 |
2 files changed, 25 insertions, 25 deletions
diff --git a/docs/dev/workflows.md b/docs/dev/workflows.md index f7eb9c27..49d2146c 100644 --- a/docs/dev/workflows.md +++ b/docs/dev/workflows.md @@ -25,7 +25,7 @@ - [Activity Eligibility](#activity-eligibility) - [Defining Activities](#defining-activities) - [Activity with Run-Once Eligibility](#activity-with-run-once-eligibility) - - [Activity with Auto-Generated Eligibility](#activity-with-auto-generated-eligibility) + - [Activity with Auto-Generated Eligibility](#activity-with-auto-generated-control-setting-eligibility) - [Activity with Setting-Based Eligibility](#activity-with-setting-based-eligibility) - [Activity with View-Type Eligibility](#activity-with-view-type-eligibility) - [Activity with Compound Eligibility](#activity-with-compound-eligibility) @@ -121,7 +121,7 @@ As always, it's possible to interact with these settings programmatically using Settings().set_string("analysis.workflows.functionWorkflow", 'core.function.defaultAnalysis', current_function) Settings().get_string("analysis.workflows.functionWorkflow", current_function) 'core.function.defaultAnalysis' - + # BinaryView settings scope Settings().get_string("analysis.workflows.functionWorkflow", bv) 'core.function.metaAnalysis' @@ -181,11 +181,11 @@ You can query the list of all registered workflows or filter them by type using <Workflow: core.function.objectiveC>, <Workflow: core.module.defaultAnalysis>, <Workflow: core.module.metaAnalysis>] - + # List all module workflows from the Settings API Settings().query_property_string_list("analysis.workflows.moduleWorkflow", "enum") ['core.module.defaultAnalysis', 'core.module.metaAnalysis'] - + # List all function workflows from the Settings API >>> Settings().query_property_string_list("analysis.workflows.functionWorkflow", "enum") ['core.function.defaultAnalysis', 'core.function.dsc', 'core.function.metaAnalysis', 'core.function.objectiveC'] @@ -201,22 +201,22 @@ The following example demonstrates how to modify a module workflow by clearing a ```python # Clone the workflow workflow = Workflow("core.module.metaAnalysis").clone() - + # Optional: Visualize the workflow topology in the UI workflow.show_topology() - + # Get the root activity of the workflow root = workflow.get_activity("core.module.defaultAnalysis") - + # Clear all activities in the workflow workflow.clear() - + # Re-register the root activity as the only activity in the workflow workflow.register_activity(root) - + # Register the modified workflow workflow.register() - + # Trigger an analysis update on the BinaryView and observe the no-op behavior bv.update_analysis() ``` @@ -229,22 +229,22 @@ This example demonstrates how to create a custom workflow that performs only the ```python # Clone the workflow and give it a unique name stringsWorkflowOnly = Workflow("core.module.metaAnalysis").clone("stringsAnalysisOnly") - + # Retrieve relevant activities for strings analysis root = stringsWorkflowOnly.get_activity("core.module.defaultAnalysis") sa1 = stringsWorkflowOnly.get_activity("core.module.queueRegionsForStringsAnalysis") sa2 = stringsWorkflowOnly.get_activity("core.module.stringsAnalysis") - + # Clear all existing activities stringsWorkflowOnly.clear() - + # Register only the strings analysis activities stringsWorkflowOnly.register_activity(sa1) stringsWorkflowOnly.register_activity(sa2) - + # Register the root activity to include the strings analysis steps stringsWorkflowOnly.register_activity(root, [sa1, sa2]) - + # Register the modified workflow configuration = json.dumps({ "title" : "Strings-Only Analysis", @@ -252,7 +252,7 @@ This example demonstrates how to create a custom workflow that performs only the "targetType": "module" }) stringsWorkflowOnly.register(configuration) - + # Apply the custom workflow to a binary view and run the analysis options = {"analysis.workflows.moduleWorkflow": "stringsAnalysisOnly"} with load(".../helloworld", options=options) as view: @@ -276,10 +276,10 @@ This example demonstrates how to customize the function-level analysis by adding } } }) - + # Clone the meta function workflow for customization workflow = Workflow("core.function.metaAnalysis").clone() - + # Register a new activity workflow.register_activity(Activity( configuration, @@ -288,10 +288,10 @@ This example demonstrates how to customize the function-level analysis by adding # Insert decoder logic here :P ) )) - + # Insert the new activity before the "generateHighLevelIL" step workflow.insert("core.function.generateHighLevelIL", ["analysis.plugins.xorStringDecoder"]) - + # Register the modified meta function workflow workflow.register() ``` @@ -333,7 +333,7 @@ modifying, or transforming the context. The structural relationship of an Activity—whether it has children or serves as a child of another Activity—is defined by the Workflow. The Workflow determines the execution order and dependency graph, making Activities composable and adaptable to various analysis pipelines. - **Declarative Metadata via JSON Configuration**: -Each Activity is accompanied by metadata that provides essential information for its integration and execution within a workflow. The metadata structure ensures that Activities are not only functionally robust but also easy to manage and integrate into complex workflows. This metadata is defined through a JSON configuration and serves several purposes: + Each Activity is accompanied by metadata that provides essential information for its integration and execution within a workflow. The metadata structure ensures that Activities are not only functionally robust but also easy to manage and integrate into complex workflows. This metadata is defined through a JSON configuration and serves several purposes: - **Identification and Documentation**: Activities are uniquely identified by a name, with optional title and description fields to provide concise and detailed documentation. These fields make it easier to understand the purpose and function of each Activity. @@ -594,17 +594,17 @@ The `show_topology()` function offers two distinct ways to visualize a workflow: ```python Workflow("core.module.metaAnalysis").show_topology() ``` -This command displays a static view of the workflow, showcasing its predefined structure. It highlights the configured activities and their relationships, providing a clear overview of the workflow's design. The topology graph is reactive, meaning if you're activly modifying the workflow, the graph will update in real-time to reflect the changes. + This command displays a static view of the workflow, showcasing its predefined structure. It highlights the configured activities and their relationships, providing a clear overview of the workflow's design. The topology graph is reactive, meaning if you're activly modifying the workflow, the graph will update in real-time to reflect the changes. - **Dynamic Workflow View**: ```python # The Module Workflow is bound to a BinaryView instance and its Workflow Machine bv.workflow.show_topology() - + # The Function Workflow is bound to a Function instance and its Workflow Machine current_function.workflow.show_topology() ``` -These commands build upon the static view by incorporating real-time dynamic state information. It provides additional insights such as the current eligibility of activities, override states, and other runtime data. This enhanced view offers a more detailed and interactive perspective, making it invaluable for monitoring and debugging during execution. + These commands build upon the static view by incorporating real-time dynamic state information. It provides additional insights such as the current eligibility of activities, override states, and other runtime data. This enhanced view offers a more detailed and interactive perspective, making it invaluable for monitoring and debugging during execution. **_NOTE:_** Using the dynamic view, the eligibility of activities can be toggled interactively. Currently, this behavior is tied to the double-click event on an activity node. This feature allows you to quickly cycle through different eligibility states, enabling rapid testing and validation of activity configurations. diff --git a/docs/guide/types/index.md b/docs/guide/types/index.md index ea1df4f8..7abcae64 100644 --- a/docs/guide/types/index.md +++ b/docs/guide/types/index.md @@ -13,6 +13,6 @@ Additionally, several types of containers for type information are documented he - [Type Libraries](typelibraries.md): Type Libraries contain types from commonly-used dynamic libraries - [Platform Types](platformtypes.md): Types that automatically apply to a platform - [Type Archives](typearchives.md): How you can use type archives to share types between analysis databases -- [Signature Libraries](../../dev/annotation.md#signature-library): Signature libraries are used to match names of functions with signatures for code that is statically compiled +- [Signature Libraries](../../dev/annotation.md#signature-libraries): Signature libraries are used to match names of functions with signatures for code that is statically compiled Additionally, make sure to see the [applying annotations](../../dev/annotation.md) section of the developer guide for information about using the API with types and covering the creation of many of the items described below. |
