summaryrefslogtreecommitdiff
path: root/docs/dev/outlining.md
diff options
context:
space:
mode:
authorJordan Wiens <github@psifertex.com>2025-12-11 17:09:46 -0500
committerJordan Wiens <github@psifertex.com>2025-12-11 17:15:25 -0500
commit4ef9ad58360b8244185a09c4dabe74c81f9c3c63 (patch)
treed831fa2267d0fdde0700ddb381e55021271cf3ef /docs/dev/outlining.md
parent5d7877b807e45c6b58e6beb73ea11d7fe7f4467f (diff)
add script for validating white space in mkdocs, and many whitespace fixes
Diffstat (limited to 'docs/dev/outlining.md')
-rw-r--r--docs/dev/outlining.md7
1 files changed, 7 insertions, 0 deletions
diff --git a/docs/dev/outlining.md b/docs/dev/outlining.md
index fa826b2f..78d2bbe0 100644
--- a/docs/dev/outlining.md
+++ b/docs/dev/outlining.md
@@ -109,6 +109,7 @@ The outliner then recognizes the intrinsic name and transforms it into the appro
#### Recognized Intrinsic Names
**Memory Copy Intrinsics**:
+
- `__memcpy` → `memcpy`, `strcpy`, or `strncpy` (based on data classification)
- `__memcpy_u8` → `memcpy` (byte-wise, count unchanged)
- `__memcpy_u16` → `memcpy` (16-bit elements, count × 2)
@@ -116,6 +117,7 @@ The outliner then recognizes the intrinsic name and transforms it into the appro
- `__memcpy_u64` → `memcpy` (64-bit elements, count × 8)
**Memory Fill Intrinsics**:
+
- `__memfill` → `memset`
- `__memfill_u8` → `memset` (byte-wise, count unchanged)
- `__memfill_u16` → `memset` (16-bit elements, count × 2)
@@ -235,11 +237,13 @@ Outlining is valuable across many analysis domains including reverse engineering
### Common Issues
**Patterns not being outlined**:
+
- Check if `analysis.outlining.builtins` is enabled
- Verify type information supports the expected operation
- Ensure patterns meet minimum size thresholds (see below)
**Incorrect function selection**:
+
- Provide more precise type information
- Check data stream classification
- Verify pattern clarity and confidence
@@ -249,17 +253,20 @@ Outlining is valuable across many analysis domains including reverse engineering
Binary Ninja applies size-based filtering to avoid outlining trivial operations. Understanding these thresholds can help explain why certain patterns aren't outlined:
**Without Type Information** (no user-provided types with full confidence):
+
- General memory operations: Must be >16 bytes
- String operations: Must be ≥4 bytes
- ASCII patterns: Must be ≥4 bytes
- Fill patterns (memset): Must be ≥16 bytes
**With Type Information** (user-provided types with full confidence):
+
- Size thresholds are relaxed
- Type compatibility checks take priority
- Operations matching type boundaries are more likely to be outlined
**String-Specific Requirements**:
+
- String must have at least 4 printable characters before null terminator
- Very short strings (1-3 bytes) are often demoted to general memory operations