---
title: "Executable Scanner"
description: "launch a target process from which to read symbol values via its stdout"
source: "https://github.com/log-10x/modules/tree/main/pipelines/compile/modules/scanner/executable/module.yaml"
icon: "material/launch"

---
Launches a subprocess to extract [symbol](https://doc.log10x.com/run/transform/structure/#symbols) values from source code or binary files.

Supports OS utilities like [strings](https://linux.die.net/man/1/strings){target="\_blank"} for pre-compiled binaries, or custom code for reading from arbitrary files and remote sources (databases, web services).

The subprocess stdout is parsed in one of two modes:

### Unstructured

Splits stdout lines using [token delimiters](https://doc.log10x.com/compile/scan/#tokendelims "token delimiters") and assigns each value an [exec](https://doc.log10x.com/run/transform/symbol/#exec) context. See the [strings](#__tabbed_1_2) configuration example below.

### Structured

Parses JSON objects from stdout containing hierarchical symbol trees with [context](https://doc.log10x.com/run/transform/symbol/#contexts) metadata (class, function, enum names). See [SymbolUnit.java](https://github.com/log-10x/pipeline-extensions/blob/main/cloud-extensions/src/main/java/com/log10x/ext/cloud/compile/symbol/SymbolUnit.java){target="\_blank"} for an example.

## :material-wrench-outline: Config Files

To configure the Executable scanner module, [:material-cog: Edit](https://doc.log10x.com/config/app/#module-config "Learn how to edit app and module configurations") these files.  

=== "Strings-nix"

    Below is the default configuration from: [executable/strings-nix.yaml](https://github.dev/log-10x/config/blob/main/pipelines/compile/scanners/executable/strings-nix.yaml "executable/strings-nix.yaml"){target="\_blank"}.  
  
    <div class="edit-options">
        <a class="md-button tenx-edit-online-button" data-tooltip="Edit online on github.dev" href="https://github.dev/log-10x/config/blob/main/pipelines/compile/scanners/executable/strings-nix.yaml" target="_blank" rel="noopener noreferrer">
            <span class="twemoji" style="margin-right: 0.3rem;">
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                    <path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path>
                </svg>
            </span> Edit Online
        </a>
        <button class="md-button tenx-strings-nix.yaml0-edit-button" data-tooltip="Edit configuration file" data-dialog-id="strings-nix-yaml0-dialog">
            <span style="margin-right: 0.3rem;">
                <span class="twemoji">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                        <path d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                    </svg>
                </span>
            </span>Edit Locally
        </button>
    </div>
    
    <dialog id="strings-nix-yaml0-dialog" class="md-dialog md-dialog--editor">
        <div class="editor-dialog-wrapper">
            <div class="editor-dialog-header">
                <span class="editor-dialog-title">Edit strings-nix.yaml Locally</span>
                <div class="editor-header-actions">
                    <button class="editor-toolbar-btn yaml-editor-locations" data-tooltip="Save">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M5 20h14v-2H5v2m14-9h-4V3H9v8H5l7 7 7-7Z"></path></svg>
                    </button>
                    <button class="editor-toolbar-btn yaml-editor-reset" data-tooltip="Reset to default">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M12.5 8c-2.65 0-5.05 1-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z"></path></svg>
                    </button>
                    <button class="editor-toolbar-btn yaml-editor-copy" data-tooltip="Copy to clipboard">
                        <svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path></svg>
                        <svg class="icon-check" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="display:none;"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg>
                    </button>
                    <span class="header-divider"></span>
                    <button class="editor-toolbar-btn yaml-editor-fullscreen" data-tooltip="Fullscreen">
                        <svg class="icon-maximize" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M5,5H10V7H7V10H5V5M14,5H19V10H17V7H14V5M17,14H19V19H14V17H17V14M10,17V19H5V14H7V17H10Z"></path></svg>
                        <svg class="icon-minimize" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="display:none;"><path fill="currentColor" d="M5,16H8V19H10V14H5V16M14,14V19H16V16H19V14H14M16,5V8H19V10H14V5H16M10,5V10H5V8H8V5H10Z"></path></svg>
                    </button>
                    <span class="header-divider"></span>
                    <button class="editor-toolbar-btn editor-dialog-close" onclick="closeDialog('strings-nix-yaml0-dialog')" data-tooltip="Close">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"></path></svg>
                    </button>
                </div>
            </div>
            <div class="editor-dialog-content">
                <div class="yaml-editor-container"></div>
            </div>
            <div class="yaml-editor-statusbar">
                <span class="yaml-editor-status"></span>
            </div>
        </div>
        <!-- Locations Popup -->
        <div class="locations-popup" style="display: none;">
            <div class="locations-popup-content">
                <div class="locations-popup-header">
                    <span class="locations-header-label">Download and save to:</span>
                    <button class="locations-popup-close" aria-label="Close">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16">
                            <path fill="currentColor" d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"></path>
                        </svg>
                    </button>
                </div>
                <ul class="locations-list">
                    <li>
                        <span class="location-label">Linux / Docker / macOS
                            <span class="help-icon" data-tooltip="Default system location. The engine automatically reads configs from here at startup. Best for production deployments.">
                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12"><path fill="currentColor" d="M11 18h2v-2h-2v2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4Z"/></svg>
                            </span>
                        </span>
                        <div class="location-path-row">
                            <code class="default-path location-path" data-tooltip=""
                                data-copy-osx="/etc/log10x/config/compile/scanners/executable/strings-nix.yaml"
                                data-copy-nix="/etc/log10x/config/compile/scanners/executable/strings-nix.yaml"
                                data-copy-win="C:\log10x\configs/compile/scanners/executable/strings-nix.yaml"></code>
                            <button class="copy-btn" data-tooltip="Copy path">
                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                                    <path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path>
                                </svg>
                            </button>
                        </div>
                    </li>
                    <li>
                        <span class="location-label">Custom directory
                            <span class="help-icon" data-tooltip="Set TENX_CONFIG environment variable to point to a custom config directory. Useful when you want configs in a non-standard location.">
                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12"><path fill="currentColor" d="M11 18h2v-2h-2v2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4Z"/></svg>
                            </span>
                        </span>
                        <div class="location-path-row">
                            <code class="location-path" data-tooltip="$TENX_CONFIG/compile/scanners/executable/strings-nix.yaml">$TENX_CONFIG/compile/scanners/executable/strings-nix.yaml</code>
                            <button class="copy-btn" data-tooltip="Copy path">
                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                                    <path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path>
                                </svg>
                            </button>
                        </div>
                    </li>
                    <li>
                        <span class="location-label">Within cloned repo
                            <span class="help-icon" data-tooltip="First run: git clone github.com/log-10x/config. Then save the file to this path within the cloned folder. Use for version control.">
                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12"><path fill="currentColor" d="M11 18h2v-2h-2v2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4Z"/></svg>
                            </span>
                        </span>
                        <div class="location-path-row">
                            <code class="location-path" data-tooltip="./pipelines/compile/scanners/executable/strings-nix.yaml">./pipelines/compile/scanners/executable/strings-nix.yaml</code>
                            <button class="copy-btn" data-tooltip="Copy path">
                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                                    <path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path>
                                </svg>
                            </button>
                        </div>
                    </li>
                </ul>
                <div class="locations-popup-footer">
                    <button class="locations-download-btn" title="Download config file">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                            <path fill="currentColor" d="M5 20h14v-2H5v2m14-9h-4V3H9v8H5l7 7 7-7Z"></path>
                        </svg>
                        <span>Download</span>
                    </button>
                </div>
            </div>
        </div>
    </dialog>
    
    <template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiZXhlYyIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJuYW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBsb2dpY2FsIG5hbWUgZm9yIHRoaXMgZXhlYyBzY2FubmVyXG5cbkEgbG9naWNhbCBuYW1lIGZvciB0aGlzIGV4ZWMgc2Nhbm5lciB1bmlxdWUgYW1vbmdzdCBhbGwgc3BlY2lmaWVkIHNjYW5uZXIgb3B0aW9uIGdyb3VwcyAoZS5nLiwgJ3N0cmluZ3NOSVgnKSIKICAgICAgICAgIH0sCiAgICAgICAgICAib3NGaWx0ZXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIHRoZSBob3N0IE9TIHRvIGFwcGx5IHRoaXMgc2Nhbm5lci5cblxuRGVmaW5lcyBhIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdCB0aGUgbmFtZSBvZiB0aGUgaG9zdCBPUyB0byBkZXRlcm1pbmUgd2hldGhlciB0byBhcHBseSB0aGlzIHNjYW5uZXIuIgogICAgICAgICAgfSwKICAgICAgICAgICJleHRlbnNpb25zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIGxpc3Qgb2YgZmlsZSBleHRlbnNpb25zIGEgdGFyZ2V0IGZpbGUgbXVzdCBtYXRjaCB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuQW4gYXJyYXkgb2YgZmlsZSBleHRlbnNpb25zIHRvIHRlc3QgYSBmaWxlIGNhbmRpZGF0ZSBhZ2FpbnN0LiBJZiB0aGUgY2FuZGlkYXRlIG1hdGNoZXMgYW55IGV4dGVuc2lvbnMsIGFwcGx5IHRoaXMgc2Nhbm5lci4iLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZmlsZU5hbWVGaWx0ZXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCB0aGUgdGFyZ2V0IGlucHV0IGZpbGUgbXVzdCBtYXRjaCB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuU2V0cyBhIHJlZ2V4IHBhdHRlcm4gdG8gdGVzdCBhIGZpbGUgY2FuZGlkYXRlIG5hbWUgYWdhaW5zdC4gSWYgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIGFueSBvZiB0aGUgZXh0ZW5zaW9ucywgYXBwbHkgdGhpcyBzY2FubmVyLiIKICAgICAgICAgIH0sCiAgICAgICAgICAic2VsZWN0b3IiIDogewogICAgICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICAgInByb2Nlc3MiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk5hbWUgb2YgYSBwcm9jZXNzIHRvIGxhdW5jaCB3aG9zZSBvdXRwdXQgd2hldGhlciB0byBhcHBseSB0aGlzIGlucHV0XG5cbkRlZmluZSBhIHByb2Nlc3MgbmFtZSB0byBsYXVuY2ggdG8gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnB1dCBmaWxlLiBJbiBzb21lIE9TcyAoZS5nLiwgTGludXgvVW5peCksIGV4ZWN1dGFibGUgZmlsZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgYSBrbm93biBleHRlbnNpb24uIEZvciB0aGlzLCBhbiBPUyB1dGlsaXR5IHN1Y2ggYXMgTklYIFtmaWxlXShodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW4xL2ZpbGUuMS5odG1sKSBjYW4gb2J0YWluIGluZm9ybWF0aW9uIG9uIHRoZSBhY3R1YWwgZmlsZSBjb250ZW50cy4gIElmIGEgc2VsZWN0b3IgcHJvY2VzcyBpcyBub3QgcHJvdmlkZWQgdGhlIGZpbGUncyBFTEYvUEUvT1NYIGJpbmFyeSBoZWFkZXIgaXMgdGVzdGVkIGZvciBhIHBvc3NpYmxlIG1hdGNoLiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJ3b3JrRGlyIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaGUgcGF0aCBvZiB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nICdleGVjU2VsZWN0b3JQcm9jZXNzJ1xuXG5EZWZpbmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIHJ1bm5pbmcgW2V4ZWNTZWxlY3RvclByb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNzZWxlY3RvcnByb2Nlc3MpLiBJZiBvbWl0dGVkLCB3aWxsIHVzZSB0aGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJhcmdzIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gJ2V4ZWNTZWxlY3RvclByb2Nlc3MnXG5cbkRlZmluZXMgYXJndW1lbnRzIGZvciB0aGUgc2VsZWN0b3IgcHJvY2VzcywgaWYgcHJvdmlkZWQuIFRoZSBgZmlsZWAgbWFjcm8gdGFrZXMgdGhlIHZhbHVlIG9mIHRoZSB0YXJnZXQgZXhlYyBmaWxlIHRvIGxhdW5jaC4iLAogICAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJ0aW1lb3V0IiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaW1lb3V0IHBlcmlvZCBhZnRlciB3aGljaCB0byB0ZXJtaW5hdGUgJ2V4ZWNTZWxlY3RvclByb2Nlc3MgcHJvY2Vzc1xuXG5TZXRzIGhvdyBsb25nIHRvIGFsbG93IHRoZSBzZWxlY3RvciBwcm9jZXNzIHRvIHJ1biBiZWZvcmUgdGVybWluYXRpb24gKGUuZy4gJzEwcycpIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgIm91dHB1dEZpbHRlciIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBmaWx0ZXIgcGF0dGVybiB0aGF0IG11c3QgbWF0Y2ggdGhlIG91dHB1dCBvZiAnZXhlY1NlbGVjdG9yUHJvY2VzcycgdG8gYXBwbHkgdGhpcyBzY2FubmVyXG5cbkRlZmluZXMgYSByZWdleCBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGRvdXQgc3RyZWFtIHJlYWQgZnJvbSB0aGUgW2V4ZWNTZWxlY3RvclByb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNzZWxlY3RvcnByb2Nlc3MpIHByb2Nlc3MuIElmIG1hdGNoZWQsIGFwcGx5IHRoaXMgc2Nhbm5lciB0byB0aGUgaW5wdXQgZmlsZS4iCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgInByb2Nlc3MiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJQcm9jZXNzIHRvIGxhdW5jaCBmb3IgZXh0cmFjdGluZyBzeW1ib2wgdmFsdWVzXG5cbkRlZmluZXMgYSBwcm9jZXNzIHRvIGxhdW5jaCBhbmQgd2hvc2Ugc3Rkb3V0IHBpcGUgdG8gcGFyc2UgZm9yIHN5bWJvbCB2YWx1ZXMuIgogICAgICAgICAgfSwKICAgICAgICAgICJ3b3JrRGlyIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiVGhlIHBhdGggb2YgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4gcnVubmluZyAnZXhlY1Byb2Nlc3MnXG5cbkRlZmluZXMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4gcnVubmluZyBbZXhlY1Byb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNwcm9jZXNzKS4gSWYgb21pdHRlZCwgdXNlcyB0aGUgd29ya2luZyBkaXJlY3RvcnkuIgogICAgICAgICAgfSwKICAgICAgICAgICJhcmdzIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gJ2V4ZWNQcm9jZXNzJyAoJ2ZpbGUnIGlzIHJlcGxhY2VkIGJ5IHNjYW4gdGFyZ2V0KVxuXG5EZWZpbmVzIGxhdW5jaCBhcmd1bWVudHMgW2V4ZWNQcm9jZXNzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbm5lci9leGVjdXRhYmxlLyNleGVjcHJvY2VzcykuIFRoZSBgZmlsZWAgbWFjcm8gZXhwYW5kcyBpbnRvIHRoZSBpbnB1dCBmaWxlIHBhdGgiLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAidGltZW91dCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRpbWVvdXQgcGVyaW9kIGFmdGVyIHdoaWNoIHRvIHRlcm1pbmF0ZSAnZXhlY1Byb2Nlc3MnIHByb2Nlc3NcblxuRGVmaW5lcyBob3cgbG9uZyBbZXhlY1Byb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNwcm9jZXNzKSBpcyBhbGxvd2VkIHRvIHJ1biBiZWZvcmUgdGVybWluYXRpb24iCiAgICAgICAgICB9LAogICAgICAgICAgInN5bWJvbCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICAgICAibWluTGVuZ3RoIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWluaW1hbCBsZW5ndGggb2YgdGhlIHN0cmluZyByZWFkIGZyb20gJ2V4ZWNQcm9jZXNzJyB0byByZWFkIGFzIGEgc3ltYm9sXG5cblNldHMgdGhlIG1pbmltYWwgbGVuZ3RoIGEgc3RyaW5nIHJlYWQgZnJvbSB0aGUgc2Nhbm5lciBwcm9jZXNzIHN0ZG91dCBtdXN0IGJlIHRvIGJlIGNvbnNpZGVyZWQgYSBzeW1ib2wgKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJtYXhMZW5ndGgiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXggbGVuZ3RoIHRoZSBzdHJpbmcgcmVhZCBmcm9tICdleGVjUHJvY2VzcycgdG8gcmVhZCBhcyBhIHN5bWJvbFxuXG5TZXRzIHRoZSBtYXhpbXVtIGxlbmd0aCBhIHN0cmluZyByZWFkIGZyb20gdGhlIHNjYW5uZXIgcHJvY2VzcyBzdGRvdXQgbXVzdCBiZSB0byBiZSBjb25zaWRlcmVkIGEgc3ltYm9sIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZmlsdGVycyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGF0dGVybnMgYSBsaW5lIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIG11c3QgTk9UIG1hdGNoXG5cbkRlZmluZXMgcmVnZXggcGF0dGVybnMgYXBwbGllZCB0byBlYWNoIGxpbmUgcmVhZCBmcm9tIHRoZSBzY2FubmVyIHByb2Nlc3MnIHN0ZG91dCB0aGF0IG11c3QgTk9UIG1hdGNoIGZvciB0aGUgbGluZSB2YWx1ZSB0byBiZSBjYXB0dXJlZCBhcyBhIHN5bWJvbC4gICBGb3IgZXhhbXBsZSwgdG8gYXZvaWQgW0FXQVYgYmluYXJ5XShodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zOTMyMjU1Mi9tZWFuaW5nLW9mLWEtY29tbW9uLXN0cmluZy1pbi1leGVjdXRhYmxlcykgd2hlbiB1c2luZyB0aGUgYHN0cmluZ3NgIE9TIHV0aWxpdHksIHNwZWNpZnk6ICBgYGAgeWFtbCBleGVjU3ltYm9sRmlsdGVyczogICAtICBeQVdBViAgICAgIGBgYGAiLAogICAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJzZXRTZWxlY3RvcnMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlJlZ2V4IHBhdHRlcm5zIHRvIGRldGVybWluZXMgd2hldGhlciB0byB0cmVhdCBhbiBpbnB1dCB2YWx1ZSBhcyBzZXQgb2YgdG9rZW5zXG5cbkRlZmluZXMgcmVnZXggcGF0dGVybnMgbXVzdCBBTEwgbWF0YyB0byB0cmVhdCBhbiBpbnB1dCB2YWx1ZSBhcyBhIGxpbmUgKGUuZy4sICdlcnJvciBjb25uZWN0aW5nIHRvIHt9JyksIG9yIGFzIGEgc2VyaWVzIG9mIGluZGVwZW5kZW50IHRva2VucyAoZS5nLiwgJ2Vycm9yJywgJ2Nvbm5lY3RpbmcnLCAndG8nKSB0byByZWR1Y2UgdGhlIGNhcmRpbmFsaXR5IGFuZCBzaXplIG9mIHRoZSBvdXRwdXQgc3ltYm9sIGZpbGUuICAgRm9yIGV4YW1wbGUsIHdoZW4gcHJvY2Vzc2luZyBmaWxlcyB0aGF0IGNvbnRhaW4gdmFsdWVzIEdPIGNvbXBpbGUgc3ltYm9scyBzdWNoIGFzOiAgIGBgYCBnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvZXhwb3J0ZXIvZmlsZWV4cG9ydGVyLmdyb3VwW2dvLnNoYXBlLnN0cnVjdCBgYGAgIFNwZWNpZnkgdGhlIHBhdHRlcm4gYmVsb3cgdG8gYnJlYWsgdGhlIHN0cmluZyBpbnRvIHNlcGFyYXRlIHN5bWJvbCB0b2tlbnMgKGUuZy4sIHNoYXBlLCBzdHJ1Y3QsLi4pOiAgIGBgYCB5YW1sIHNldFNlbGVjdG9yczogIC0gXig/OmdpdGh1YlxcLmNvbXxnb2xhbmdcXC5vcmd8dHlwZTpcXC5lcVxcLig/OmdpdGh1YlxcLmNvbXxnb2xhbmdcXC5vcmcpKSgvW2EtekEtWjAtOV8tXSspKiQgLSBeW2EtekEtWjAtOV8vOlxcLlxcW1xcXVxcKiwtXSooPzpcXC5bYS16QS1aMC05XSt8XFxbW2EtekEtWjAtOSxcXC5cXCovOl8tXStcXF18LWZtKT8kIGBgYCIsCiAgICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpc1N0cnVjdHVyZWQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTZXRzIHdoZXRoZXIgb3V0cHV0IGxpbmVzIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIGFyZSByZWFkIGFzIHBsYWluIHRleHQgb3Igc3RydWN0dXJlZCBKU09OXG5cbkNvbnRyb2xzIHdoZXRoZXIgdG8gcmVhZCB0aGUgW2V4ZWNQcm9jZXNzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbm5lci9leGVjdXRhYmxlLyNleGVjcHJvY2Vzcykgc3Rkb3V0IGFzIHBsYWluIHRleHQgb3IgYXMgYSBKU09OIG9iamVjdCBjb250YWluaW5nIHNvdXJjZSBjb250ZXh0IGluZm9ybWF0aW9uLiBJZiBmYWxzZSAoZGVmYXVsdCksIHN5bWJvbCB2YWx1ZXMgcmVhZCBmcm9tIHRoZSBwcm9jZXNzJyBvdXRwdXQgYXJlIG1hcmtlZCBhcyBoYXZpbmcgYW4gW2V4ZWNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI2V4ZWMpIGNvbnRleHQuIFRvIGxlYXJuIG1vcmUgYWJvdXQgcHJvZHVjaW5nIHN0cnVjdHVyZWQgc3ltYm9sIHZhbHVlcywgc2VlIFtTeW1ib2xVbml0LmphdmFdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L3BpcGVsaW5lLWV4dGVuc2lvbnMvYmxvYi9tYWluL2Nsb3VkLWV4dGVuc2lvbnMvc3JjL21haW4vamF2YS9jb20vbG9nMTB4L2V4dC9jbG91ZC9jb21waWxlL3N5bWJvbC9TeW1ib2xVbml0LmphdmEpIgogICAgICAgICAgfSwKICAgICAgICAgICJzeW1ib2xzUHJlZml4IiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJib29sZWFuIiwKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkEgcHJlZml4IGxpbmVzIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIG11c3QgbWF0Y2ggdG8gcGFyc2UgYXMgc3RydWN0dXJlZCBKU09OIHN5bWJvbHNcblxuU2V0cyBhIHByZWZpeCB0aGF0IG11c3QgcHJlY2VkZSBsaW5lcyByZWFkIGZyb20gdGhlIHNjYW4gcHJvY2Vzcycgc3Rkb3V0IHRvIHBhcnNlIGFzIHN0cnVjdHVyZWQgSlNPTiBzeW1ib2wgdHJlZXMuIE9ubHkgYXBwbGllcyB3aGVuIFtleGVjSXNTdHJ1Y3R1cmVkXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbm5lci9leGVjdXRhYmxlLyNleGVjaXNzdHJ1Y3R1cmVkKSBpcyB0cnVlIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIiA6IFsKICAgICAgICAgICJuYW1lIiwKICAgICAgICAgICJvc0ZpbHRlciIKICAgICAgICBdCiAgICAgIH0KICAgIH0KICB9LAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9</template>

    ```yaml
    # # 🔟❎ 'compile' executable 'strings' configuration
    
    # This executable symbol scanner configuration uses OS-specific utilities to extract 
    # constant string values from pre-compiled binaries (e.g. programs, shared libraries).
    # Any matching text values are added to the output symbol files.
    
    # The following configuration is added by default to the 10x 'compile' pipeline.
    # If another 'executable' scanner is defined whose 'osFilter' matches that of the 
    # current target input file, it will take precedence over the scanners defined below.
    # To learn more about the 'executable' scanner, 
    # see: https://doc.log10x.com/compile/scanner/executable
    
    # Set the 10x pipeline to 'compile'
    tenx: compile
    
    # =============================== Exec Options ================================
    
    exec: 
     
        # This scanner uses the Linux built-in 'strings' (https://linux.die.net/man/1/file)
        # command to extract symbol values from a target binary executable file
      - name: stringsNIX
        
        # This configuration targets NIX OSs
        osFilter: (nix|nux|lux|mac)  
        
        # try for known extensions before invoking a 'selectorProcess'
        extensions:   
          - .so
          - .dynlib   
          
        # 'selector' processes provide a method for determining whether a file is an executable binary.
        #  If a selector process is not provided the file's ELF/PE/OSX binary header is tested. 
        #  Since on NIX, executables do not have a known extension,
        #  the 'selector' process uses the built-in 'file' command whose 
        #  output is used to verify the target file is a NIX executable file.   
        selector:
          process: file
          args:
            - file # this macro value is replaced at run-time by the actual input file name
          timeout: 5s      
          outputFilter: ".*?\\bexecutable\\b.*?" # select 'executable' files
          
        process: strings    
        args:
          - -a   # scan the whole file, not just initialized and loaded sections 
          - file # This macro value is replaced at run-time by the actual text/binary input file   
        timeout: 100s
    
        symbol: 
          # 'minLength' specifies the min number of chars a value extracted via strings must be to 
          #  in order to qualify as a symbol. 
          minLength: 4  
    
          # 'maxLength' specifies the max number of chars a value extracted via strings must be to 
          #  in order to qualify as a symbol. 
          maxLength: 1024
    
          # 'filters' defines regex patterns applied to each line read from the scanner process' stdout 
          #  that must NOT match for the line value to be considered a symbol.
          filters: 
            - AWAV.  # https://stackoverflow.com/questions/39322552/meaning-of-a-common-string-in-executables
            - "^(?=^.{0,7}$)(?=.*[^a-zA-Z]).*$" # Matches any string that is shorter than 8 characters (0 to 7 chars) and contains at least one non-alphabetic character.
    
          # 'setSelector' specifies regex patterns that determines whether to treat an input value as set of tokens    
          setSelectors:
            - '^[0-9].*$'                  # Starts with digit
            - '^\*.*$'                     # Starts with *
            - '^(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}(?:/[^\s]*)?$' # Domain + optional path (e.g., github.com/user/repo)
            - '^type:\\..*$'               # Go land metadata starts with "type:." (any suffix)
    ```

=== "Strings-win"

    Below is the default configuration from: [executable/strings-win.yaml](https://github.dev/log-10x/config/blob/main/pipelines/compile/scanners/executable/strings-win.yaml "executable/strings-win.yaml"){target="\_blank"}.  
  
    <div class="edit-options">
        <a class="md-button tenx-edit-online-button" data-tooltip="Edit online on github.dev" href="https://github.dev/log-10x/config/blob/main/pipelines/compile/scanners/executable/strings-win.yaml" target="_blank" rel="noopener noreferrer">
            <span class="twemoji" style="margin-right: 0.3rem;">
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                    <path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"></path>
                </svg>
            </span> Edit Online
        </a>
        <button class="md-button tenx-strings-win.yaml1-edit-button" data-tooltip="Edit configuration file" data-dialog-id="strings-win-yaml1-dialog">
            <span style="margin-right: 0.3rem;">
                <span class="twemoji">
                    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
                        <path d="M20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18,2.9 17.35,2.9 16.96,3.29L15.12,5.12L18.87,8.87M3,17.25V21H6.75L17.81,9.93L14.06,6.18L3,17.25Z"></path>
                    </svg>
                </span>
            </span>Edit Locally
        </button>
    </div>
    
    <dialog id="strings-win-yaml1-dialog" class="md-dialog md-dialog--editor">
        <div class="editor-dialog-wrapper">
            <div class="editor-dialog-header">
                <span class="editor-dialog-title">Edit strings-win.yaml Locally</span>
                <div class="editor-header-actions">
                    <button class="editor-toolbar-btn yaml-editor-locations" data-tooltip="Save">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M5 20h14v-2H5v2m14-9h-4V3H9v8H5l7 7 7-7Z"></path></svg>
                    </button>
                    <button class="editor-toolbar-btn yaml-editor-reset" data-tooltip="Reset to default">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M12.5 8c-2.65 0-5.05 1-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z"></path></svg>
                    </button>
                    <button class="editor-toolbar-btn yaml-editor-copy" data-tooltip="Copy to clipboard">
                        <svg class="icon-copy" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path></svg>
                        <svg class="icon-check" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="display:none;"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg>
                    </button>
                    <span class="header-divider"></span>
                    <button class="editor-toolbar-btn yaml-editor-fullscreen" data-tooltip="Fullscreen">
                        <svg class="icon-maximize" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M5,5H10V7H7V10H5V5M14,5H19V10H17V7H14V5M17,14H19V19H14V17H17V14M10,17V19H5V14H7V17H10Z"></path></svg>
                        <svg class="icon-minimize" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="display:none;"><path fill="currentColor" d="M5,16H8V19H10V14H5V16M14,14V19H16V16H19V14H14M16,5V8H19V10H14V5H16M10,5V10H5V8H8V5H10Z"></path></svg>
                    </button>
                    <span class="header-divider"></span>
                    <button class="editor-toolbar-btn editor-dialog-close" onclick="closeDialog('strings-win-yaml1-dialog')" data-tooltip="Close">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"></path></svg>
                    </button>
                </div>
            </div>
            <div class="editor-dialog-content">
                <div class="yaml-editor-container"></div>
            </div>
            <div class="yaml-editor-statusbar">
                <span class="yaml-editor-status"></span>
            </div>
        </div>
        <!-- Locations Popup -->
        <div class="locations-popup" style="display: none;">
            <div class="locations-popup-content">
                <div class="locations-popup-header">
                    <span class="locations-header-label">Download and save to:</span>
                    <button class="locations-popup-close" aria-label="Close">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16">
                            <path fill="currentColor" d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z"></path>
                        </svg>
                    </button>
                </div>
                <ul class="locations-list">
                    <li>
                        <span class="location-label">Linux / Docker / macOS
                            <span class="help-icon" data-tooltip="Default system location. The engine automatically reads configs from here at startup. Best for production deployments.">
                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12"><path fill="currentColor" d="M11 18h2v-2h-2v2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4Z"/></svg>
                            </span>
                        </span>
                        <div class="location-path-row">
                            <code class="default-path location-path" data-tooltip=""
                                data-copy-osx="/etc/log10x/config/compile/scanners/executable/strings-win.yaml"
                                data-copy-nix="/etc/log10x/config/compile/scanners/executable/strings-win.yaml"
                                data-copy-win="C:\log10x\configs/compile/scanners/executable/strings-win.yaml"></code>
                            <button class="copy-btn" data-tooltip="Copy path">
                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                                    <path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path>
                                </svg>
                            </button>
                        </div>
                    </li>
                    <li>
                        <span class="location-label">Custom directory
                            <span class="help-icon" data-tooltip="Set TENX_CONFIG environment variable to point to a custom config directory. Useful when you want configs in a non-standard location.">
                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12"><path fill="currentColor" d="M11 18h2v-2h-2v2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4Z"/></svg>
                            </span>
                        </span>
                        <div class="location-path-row">
                            <code class="location-path" data-tooltip="$TENX_CONFIG/compile/scanners/executable/strings-win.yaml">$TENX_CONFIG/compile/scanners/executable/strings-win.yaml</code>
                            <button class="copy-btn" data-tooltip="Copy path">
                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                                    <path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path>
                                </svg>
                            </button>
                        </div>
                    </li>
                    <li>
                        <span class="location-label">Within cloned repo
                            <span class="help-icon" data-tooltip="First run: git clone github.com/log-10x/config. Then save the file to this path within the cloned folder. Use for version control.">
                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="12" height="12"><path fill="currentColor" d="M11 18h2v-2h-2v2m1-16A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14a4 4 0 0 0-4 4h2a2 2 0 0 1 2-2 2 2 0 0 1 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5a4 4 0 0 0-4-4Z"/></svg>
                            </span>
                        </span>
                        <div class="location-path-row">
                            <code class="location-path" data-tooltip="./pipelines/compile/scanners/executable/strings-win.yaml">./pipelines/compile/scanners/executable/strings-win.yaml</code>
                            <button class="copy-btn" data-tooltip="Copy path">
                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                                    <path fill="currentColor" d="M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1Z"></path>
                                </svg>
                            </button>
                        </div>
                    </li>
                </ul>
                <div class="locations-popup-footer">
                    <button class="locations-download-btn" title="Download config file">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="14" height="14">
                            <path fill="currentColor" d="M5 20h14v-2H5v2m14-9h-4V3H9v8H5l7 7 7-7Z"></path>
                        </svg>
                        <span>Download</span>
                    </button>
                </div>
            </div>
        </div>
    </dialog>
    
    <template class="tenx-config-schema" data-encoding="base64">ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiZXhlYyIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJuYW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBsb2dpY2FsIG5hbWUgZm9yIHRoaXMgZXhlYyBzY2FubmVyXG5cbkEgbG9naWNhbCBuYW1lIGZvciB0aGlzIGV4ZWMgc2Nhbm5lciB1bmlxdWUgYW1vbmdzdCBhbGwgc3BlY2lmaWVkIHNjYW5uZXIgb3B0aW9uIGdyb3VwcyAoZS5nLiwgJ3N0cmluZ3NOSVgnKSIKICAgICAgICAgIH0sCiAgICAgICAgICAib3NGaWx0ZXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIHRoZSBob3N0IE9TIHRvIGFwcGx5IHRoaXMgc2Nhbm5lci5cblxuRGVmaW5lcyBhIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdCB0aGUgbmFtZSBvZiB0aGUgaG9zdCBPUyB0byBkZXRlcm1pbmUgd2hldGhlciB0byBhcHBseSB0aGlzIHNjYW5uZXIuIgogICAgICAgICAgfSwKICAgICAgICAgICJleHRlbnNpb25zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIGxpc3Qgb2YgZmlsZSBleHRlbnNpb25zIGEgdGFyZ2V0IGZpbGUgbXVzdCBtYXRjaCB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuQW4gYXJyYXkgb2YgZmlsZSBleHRlbnNpb25zIHRvIHRlc3QgYSBmaWxlIGNhbmRpZGF0ZSBhZ2FpbnN0LiBJZiB0aGUgY2FuZGlkYXRlIG1hdGNoZXMgYW55IGV4dGVuc2lvbnMsIGFwcGx5IHRoaXMgc2Nhbm5lci4iLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZmlsZU5hbWVGaWx0ZXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCB0aGUgdGFyZ2V0IGlucHV0IGZpbGUgbXVzdCBtYXRjaCB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuU2V0cyBhIHJlZ2V4IHBhdHRlcm4gdG8gdGVzdCBhIGZpbGUgY2FuZGlkYXRlIG5hbWUgYWdhaW5zdC4gSWYgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIGFueSBvZiB0aGUgZXh0ZW5zaW9ucywgYXBwbHkgdGhpcyBzY2FubmVyLiIKICAgICAgICAgIH0sCiAgICAgICAgICAic2VsZWN0b3IiIDogewogICAgICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICAgInByb2Nlc3MiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk5hbWUgb2YgYSBwcm9jZXNzIHRvIGxhdW5jaCB3aG9zZSBvdXRwdXQgd2hldGhlciB0byBhcHBseSB0aGlzIGlucHV0XG5cbkRlZmluZSBhIHByb2Nlc3MgbmFtZSB0byBsYXVuY2ggdG8gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnB1dCBmaWxlLiBJbiBzb21lIE9TcyAoZS5nLiwgTGludXgvVW5peCksIGV4ZWN1dGFibGUgZmlsZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgYSBrbm93biBleHRlbnNpb24uIEZvciB0aGlzLCBhbiBPUyB1dGlsaXR5IHN1Y2ggYXMgTklYIFtmaWxlXShodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW4xL2ZpbGUuMS5odG1sKSBjYW4gb2J0YWluIGluZm9ybWF0aW9uIG9uIHRoZSBhY3R1YWwgZmlsZSBjb250ZW50cy4gIElmIGEgc2VsZWN0b3IgcHJvY2VzcyBpcyBub3QgcHJvdmlkZWQgdGhlIGZpbGUncyBFTEYvUEUvT1NYIGJpbmFyeSBoZWFkZXIgaXMgdGVzdGVkIGZvciBhIHBvc3NpYmxlIG1hdGNoLiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJ3b3JrRGlyIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaGUgcGF0aCBvZiB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nICdleGVjU2VsZWN0b3JQcm9jZXNzJ1xuXG5EZWZpbmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIHJ1bm5pbmcgW2V4ZWNTZWxlY3RvclByb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNzZWxlY3RvcnByb2Nlc3MpLiBJZiBvbWl0dGVkLCB3aWxsIHVzZSB0aGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJhcmdzIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gJ2V4ZWNTZWxlY3RvclByb2Nlc3MnXG5cbkRlZmluZXMgYXJndW1lbnRzIGZvciB0aGUgc2VsZWN0b3IgcHJvY2VzcywgaWYgcHJvdmlkZWQuIFRoZSBgZmlsZWAgbWFjcm8gdGFrZXMgdGhlIHZhbHVlIG9mIHRoZSB0YXJnZXQgZXhlYyBmaWxlIHRvIGxhdW5jaC4iLAogICAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJ0aW1lb3V0IiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaW1lb3V0IHBlcmlvZCBhZnRlciB3aGljaCB0byB0ZXJtaW5hdGUgJ2V4ZWNTZWxlY3RvclByb2Nlc3MgcHJvY2Vzc1xuXG5TZXRzIGhvdyBsb25nIHRvIGFsbG93IHRoZSBzZWxlY3RvciBwcm9jZXNzIHRvIHJ1biBiZWZvcmUgdGVybWluYXRpb24gKGUuZy4gJzEwcycpIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgIm91dHB1dEZpbHRlciIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBmaWx0ZXIgcGF0dGVybiB0aGF0IG11c3QgbWF0Y2ggdGhlIG91dHB1dCBvZiAnZXhlY1NlbGVjdG9yUHJvY2VzcycgdG8gYXBwbHkgdGhpcyBzY2FubmVyXG5cbkRlZmluZXMgYSByZWdleCBwYXR0ZXJuIHRvIG1hdGNoIGFnYWluc3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGRvdXQgc3RyZWFtIHJlYWQgZnJvbSB0aGUgW2V4ZWNTZWxlY3RvclByb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNzZWxlY3RvcnByb2Nlc3MpIHByb2Nlc3MuIElmIG1hdGNoZWQsIGFwcGx5IHRoaXMgc2Nhbm5lciB0byB0aGUgaW5wdXQgZmlsZS4iCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgInByb2Nlc3MiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJQcm9jZXNzIHRvIGxhdW5jaCBmb3IgZXh0cmFjdGluZyBzeW1ib2wgdmFsdWVzXG5cbkRlZmluZXMgYSBwcm9jZXNzIHRvIGxhdW5jaCBhbmQgd2hvc2Ugc3Rkb3V0IHBpcGUgdG8gcGFyc2UgZm9yIHN5bWJvbCB2YWx1ZXMuIgogICAgICAgICAgfSwKICAgICAgICAgICJ3b3JrRGlyIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiVGhlIHBhdGggb2YgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4gcnVubmluZyAnZXhlY1Byb2Nlc3MnXG5cbkRlZmluZXMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZW4gcnVubmluZyBbZXhlY1Byb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNwcm9jZXNzKS4gSWYgb21pdHRlZCwgdXNlcyB0aGUgd29ya2luZyBkaXJlY3RvcnkuIgogICAgICAgICAgfSwKICAgICAgICAgICJhcmdzIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJMaXN0IG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gJ2V4ZWNQcm9jZXNzJyAoJ2ZpbGUnIGlzIHJlcGxhY2VkIGJ5IHNjYW4gdGFyZ2V0KVxuXG5EZWZpbmVzIGxhdW5jaCBhcmd1bWVudHMgW2V4ZWNQcm9jZXNzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbm5lci9leGVjdXRhYmxlLyNleGVjcHJvY2VzcykuIFRoZSBgZmlsZWAgbWFjcm8gZXhwYW5kcyBpbnRvIHRoZSBpbnB1dCBmaWxlIHBhdGgiLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAidGltZW91dCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRpbWVvdXQgcGVyaW9kIGFmdGVyIHdoaWNoIHRvIHRlcm1pbmF0ZSAnZXhlY1Byb2Nlc3MnIHByb2Nlc3NcblxuRGVmaW5lcyBob3cgbG9uZyBbZXhlY1Byb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNwcm9jZXNzKSBpcyBhbGxvd2VkIHRvIHJ1biBiZWZvcmUgdGVybWluYXRpb24iCiAgICAgICAgICB9LAogICAgICAgICAgInN5bWJvbCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6ICJvYmplY3QiLAogICAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UsCiAgICAgICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICAgICAibWluTGVuZ3RoIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgIm51bWJlciIsCiAgICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWluaW1hbCBsZW5ndGggb2YgdGhlIHN0cmluZyByZWFkIGZyb20gJ2V4ZWNQcm9jZXNzJyB0byByZWFkIGFzIGEgc3ltYm9sXG5cblNldHMgdGhlIG1pbmltYWwgbGVuZ3RoIGEgc3RyaW5nIHJlYWQgZnJvbSB0aGUgc2Nhbm5lciBwcm9jZXNzIHN0ZG91dCBtdXN0IGJlIHRvIGJlIGNvbnNpZGVyZWQgYSBzeW1ib2wgKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJtYXhMZW5ndGgiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJNYXggbGVuZ3RoIHRoZSBzdHJpbmcgcmVhZCBmcm9tICdleGVjUHJvY2VzcycgdG8gcmVhZCBhcyBhIHN5bWJvbFxuXG5TZXRzIHRoZSBtYXhpbXVtIGxlbmd0aCBhIHN0cmluZyByZWFkIGZyb20gdGhlIHNjYW5uZXIgcHJvY2VzcyBzdGRvdXQgbXVzdCBiZSB0byBiZSBjb25zaWRlcmVkIGEgc3ltYm9sIChBY2NlcHRzIG51bWJlciBvciBzdHJpbmcgd2l0aCAkPSBwcmVmaXggZm9yIHJ1bnRpbWUgZXZhbHVhdGlvbikiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiZmlsdGVycyIgOiB7CiAgICAgICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGF0dGVybnMgYSBsaW5lIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIG11c3QgTk9UIG1hdGNoXG5cbkRlZmluZXMgcmVnZXggcGF0dGVybnMgYXBwbGllZCB0byBlYWNoIGxpbmUgcmVhZCBmcm9tIHRoZSBzY2FubmVyIHByb2Nlc3MnIHN0ZG91dCB0aGF0IG11c3QgTk9UIG1hdGNoIGZvciB0aGUgbGluZSB2YWx1ZSB0byBiZSBjYXB0dXJlZCBhcyBhIHN5bWJvbC4gICBGb3IgZXhhbXBsZSwgdG8gYXZvaWQgW0FXQVYgYmluYXJ5XShodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zOTMyMjU1Mi9tZWFuaW5nLW9mLWEtY29tbW9uLXN0cmluZy1pbi1leGVjdXRhYmxlcykgd2hlbiB1c2luZyB0aGUgYHN0cmluZ3NgIE9TIHV0aWxpdHksIHNwZWNpZnk6ICBgYGAgeWFtbCBleGVjU3ltYm9sRmlsdGVyczogICAtICBeQVdBViAgICAgIGBgYGAiLAogICAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJzZXRTZWxlY3RvcnMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlJlZ2V4IHBhdHRlcm5zIHRvIGRldGVybWluZXMgd2hldGhlciB0byB0cmVhdCBhbiBpbnB1dCB2YWx1ZSBhcyBzZXQgb2YgdG9rZW5zXG5cbkRlZmluZXMgcmVnZXggcGF0dGVybnMgbXVzdCBBTEwgbWF0YyB0byB0cmVhdCBhbiBpbnB1dCB2YWx1ZSBhcyBhIGxpbmUgKGUuZy4sICdlcnJvciBjb25uZWN0aW5nIHRvIHt9JyksIG9yIGFzIGEgc2VyaWVzIG9mIGluZGVwZW5kZW50IHRva2VucyAoZS5nLiwgJ2Vycm9yJywgJ2Nvbm5lY3RpbmcnLCAndG8nKSB0byByZWR1Y2UgdGhlIGNhcmRpbmFsaXR5IGFuZCBzaXplIG9mIHRoZSBvdXRwdXQgc3ltYm9sIGZpbGUuICAgRm9yIGV4YW1wbGUsIHdoZW4gcHJvY2Vzc2luZyBmaWxlcyB0aGF0IGNvbnRhaW4gdmFsdWVzIEdPIGNvbXBpbGUgc3ltYm9scyBzdWNoIGFzOiAgIGBgYCBnaXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktY29sbGVjdG9yLWNvbnRyaWIvZXhwb3J0ZXIvZmlsZWV4cG9ydGVyLmdyb3VwW2dvLnNoYXBlLnN0cnVjdCBgYGAgIFNwZWNpZnkgdGhlIHBhdHRlcm4gYmVsb3cgdG8gYnJlYWsgdGhlIHN0cmluZyBpbnRvIHNlcGFyYXRlIHN5bWJvbCB0b2tlbnMgKGUuZy4sIHNoYXBlLCBzdHJ1Y3QsLi4pOiAgIGBgYCB5YW1sIHNldFNlbGVjdG9yczogIC0gXig/OmdpdGh1YlxcLmNvbXxnb2xhbmdcXC5vcmd8dHlwZTpcXC5lcVxcLig/OmdpdGh1YlxcLmNvbXxnb2xhbmdcXC5vcmcpKSgvW2EtekEtWjAtOV8tXSspKiQgLSBeW2EtekEtWjAtOV8vOlxcLlxcW1xcXVxcKiwtXSooPzpcXC5bYS16QS1aMC05XSt8XFxbW2EtekEtWjAtOSxcXC5cXCovOl8tXStcXF18LWZtKT8kIGBgYCIsCiAgICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJpc1N0cnVjdHVyZWQiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJTZXRzIHdoZXRoZXIgb3V0cHV0IGxpbmVzIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIGFyZSByZWFkIGFzIHBsYWluIHRleHQgb3Igc3RydWN0dXJlZCBKU09OXG5cbkNvbnRyb2xzIHdoZXRoZXIgdG8gcmVhZCB0aGUgW2V4ZWNQcm9jZXNzXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbm5lci9leGVjdXRhYmxlLyNleGVjcHJvY2Vzcykgc3Rkb3V0IGFzIHBsYWluIHRleHQgb3IgYXMgYSBKU09OIG9iamVjdCBjb250YWluaW5nIHNvdXJjZSBjb250ZXh0IGluZm9ybWF0aW9uLiBJZiBmYWxzZSAoZGVmYXVsdCksIHN5bWJvbCB2YWx1ZXMgcmVhZCBmcm9tIHRoZSBwcm9jZXNzJyBvdXRwdXQgYXJlIG1hcmtlZCBhcyBoYXZpbmcgYW4gW2V4ZWNdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vcnVuL3RyYW5zZm9ybS9zeW1ib2wvI2V4ZWMpIGNvbnRleHQuIFRvIGxlYXJuIG1vcmUgYWJvdXQgcHJvZHVjaW5nIHN0cnVjdHVyZWQgc3ltYm9sIHZhbHVlcywgc2VlIFtTeW1ib2xVbml0LmphdmFdKGh0dHBzOi8vZ2l0aHViLmNvbS9sb2ctMTB4L3BpcGVsaW5lLWV4dGVuc2lvbnMvYmxvYi9tYWluL2Nsb3VkLWV4dGVuc2lvbnMvc3JjL21haW4vamF2YS9jb20vbG9nMTB4L2V4dC9jbG91ZC9jb21waWxlL3N5bWJvbC9TeW1ib2xVbml0LmphdmEpIgogICAgICAgICAgfSwKICAgICAgICAgICJzeW1ib2xzUHJlZml4IiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJib29sZWFuIiwKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkEgcHJlZml4IGxpbmVzIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIG11c3QgbWF0Y2ggdG8gcGFyc2UgYXMgc3RydWN0dXJlZCBKU09OIHN5bWJvbHNcblxuU2V0cyBhIHByZWZpeCB0aGF0IG11c3QgcHJlY2VkZSBsaW5lcyByZWFkIGZyb20gdGhlIHNjYW4gcHJvY2Vzcycgc3Rkb3V0IHRvIHBhcnNlIGFzIHN0cnVjdHVyZWQgSlNPTiBzeW1ib2wgdHJlZXMuIE9ubHkgYXBwbGllcyB3aGVuIFtleGVjSXNTdHJ1Y3R1cmVkXShodHRwczovL2RvYy5sb2cxMHguY29tL2NvbXBpbGUvc2Nhbm5lci9leGVjdXRhYmxlLyNleGVjaXNzdHJ1Y3R1cmVkKSBpcyB0cnVlIChBY2NlcHRzIGJvb2xlYW4gb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIgogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmVkIiA6IFsKICAgICAgICAgICJuYW1lIiwKICAgICAgICAgICJvc0ZpbHRlciIKICAgICAgICBdCiAgICAgIH0KICAgIH0KICB9LAogICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZQp9</template>

    ```yaml
    # # 🔟❎ 'compile' executable 'strings' configuration
    
    # This executable symbol scanner configuration uses OS-specific utilities to extract 
    # constant string values from pre-compiled binaries (e.g. programs, shared libraries).
    # Any matching text values are added to the output symbol files.
    
    # The following configuration is added by default to the 10x 'compile' pipeline.
    # If another 'executable' scanner is defined whose 'osFilter' matches that of the 
    # current target input file, it will take precedence over the scanners defined below.
    # To learn more about the 'executable' scanner, 
    # see: https://doc.log10x.com/compile/scanner/executable/
    
    # Set the 10x pipeline to 'compile'
    tenx: compile
    
    # =============================== Exec Options ================================
    
    exec: 
     
        # This configuration provides a similar capability for scanning Windows executable files.
    
        # *IMPORTANT*: On Windows, the 'strings' command is not installed by default and
        # should be downloaded from: https://docs.microsoft.com/en-us/sysinternals/downloads/strings   
        # and added to 'PATH'    
      - name: stringsWin
      
          # target Win
        osFilter: win   
        
        extensions:
          - .so
          - .dll         
        
        process: strings
        args:
          - file # This macro value is replaced at run-time by the actual input file name
        timeout: 10s
        
    ```

## :material-menu: Options

Specify the options below to [configure](/config "configure") multiple Executable scanner:

|Name|Description|Category|
|---|---|---|
|[execName](#execname "a logical name for this exec scanner")|A logical name for this exec scanner|Scanner|
|[execProcess](#execprocess "process to launch for extracting symbol values")|Process to launch for extracting symbol values|Scanner|
|[execWorkDir](#execworkdir "the path of the working directory when running 'execProcess'")|The path of the working directory when running 'execProcess'|Scanner|
|[execArgs](#execargs "list of arguments passed to 'execProcess' ('file' is replaced by scan target)")|List of arguments passed to 'execProcess' ('file' is replaced by scan target)|Scanner|
|[execTimeout](#exectimeout "timeout period after which to terminate 'execProcess' process")|Timeout period after which to terminate 'execProcess' process|Scanner|
|[execOsFilter](#execosfilter "a pattern that must match the name of the host OS to apply this scanner.")|A pattern that must match the name of the host OS to apply this scanner.|Filter|
|[execExtensions](#execextensions "a list of file extensions a target file must match to apply this scanner")|A list of file extensions a target file must match to apply this scanner|Filter|
|[execFileNameFilter](#execfilenamefilter "a pattern that the target input file must match to apply this scanner")|A pattern that the target input file must match to apply this scanner|Filter|
|[execSelectorProcess](#execselectorprocess "name of a process to launch whose output whether to apply this input")|Name of a process to launch whose output whether to apply this input|Selector|
|[execSelectorWorkDir](#execselectorworkdir "the path of the working directory when running 'execSelectorProcess'")|The path of the working directory when running 'execSelectorProcess'|Selector|
|[execSelectorArgs](#execselectorargs "list of arguments passed to 'execSelectorProcess'")|List of arguments passed to 'execSelectorProcess'|Selector|
|[execSelectorTimeout](#execselectortimeout "timeout period after which to terminate 'execSelectorProcess process")|Timeout period after which to terminate 'execSelectorProcess process|Selector|
|[execSelectorOutputFilter](#execselectoroutputfilter "a filter pattern that must match the output of 'execSelectorProcess' to apply this scanner")|A filter pattern that must match the output of 'execSelectorProcess' to apply this scanner|Selector|
|[execSymbolMinLength](#execsymbolminlength "minimal length of the string read from 'execProcess' to read as a symbol")|Minimal length of the string read from 'execProcess' to read as a symbol|Parse|
|[execSymbolMaxLength](#execsymbolmaxlength "max length the string read from 'execProcess' to read as a symbol")|Max length the string read from 'execProcess' to read as a symbol|Parse|
|[execSymbolFilters](#execsymbolfilters "patterns a line read from 'execProcess' must NOT match")|Patterns a line read from 'execProcess' must NOT match|Parse|
|[execSymbolSetSelectors](#execsymbolsetselectors "regex patterns to determines whether to treat an input value as set of tokens")|Regex patterns to determines whether to treat an input value as set of tokens|Parse|
|[execIsStructured](#execisstructured "sets whether output lines read from 'execProcess' are read as plain text or structured JSON")|Sets whether output lines read from 'execProcess' are read as plain text or structured JSON|Parse|
|[execSymbolsPrefix](#execsymbolsprefix "a prefix lines read from 'execProcess' must match to parse as structured JSON symbols")|A prefix lines read from 'execProcess' must match to parse as structured JSON symbols|Parse|

### Scanner

#### :material-menu-right-outline:**`execName`**

A logical name for this exec scanner.

|Type|Required|Category|
|---|---|---|
|String|✔|Scanner|

A logical name for this exec scanner unique amongst all specified scanner option groups (e.g., 'stringsNIX').


#### :material-menu-right-outline:**`execProcess`**

Process to launch for extracting symbol values.

|Type|Default|Category|
|---|---|---|
|String|""|Scanner|

Defines a process to launch and whose stdout pipe to parse for symbol values.


#### :material-menu-right-outline:**`execWorkDir`**

The path of the working directory when running 'execProcess'.

|Type|Default|Category|
|---|---|---|
|String|""|Scanner|

Defines the working directory when running [execProcess](https://doc.log10x.com/compile/scanner/executable/#execprocess "process to launch for extracting symbol values").
If omitted, uses the working directory.


#### :material-menu-right-outline:**`execArgs`**

List of arguments passed to 'execProcess' ('file' is replaced by scan target).

|Type|Default|Category|
|---|---|---|
|List|\[\]|Scanner|

Defines launch arguments [execProcess](https://doc.log10x.com/compile/scanner/executable/#execprocess "process to launch for extracting symbol values").
The `file` macro expands into the input file path.


#### :material-menu-right-outline:**`execTimeout`**

Timeout period after which to terminate 'execProcess' process.

|Type|Default|Category|
|---|---|---|
|String|""|Scanner|

Defines how long [execProcess](https://doc.log10x.com/compile/scanner/executable/#execprocess "process to launch for extracting symbol values") is allowed to run before termination.


### Filter

#### :material-menu-right-outline:**`execOsFilter`**

A pattern that must match the name of the host OS to apply this scanner.

|Type|Required|Category|
|---|---|---|
|String|✔|Filter|

Defines a pattern to match against the name of the host OS
to determine whether to apply this scanner.


#### :material-menu-right-outline:**`execExtensions`**

A list of file extensions a target file must match to apply this scanner.

|Type|Default|Category|
|---|---|---|
|List|\[\]|Filter|

An array of file extensions to test a file candidate against.
If the candidate matches any extensions, apply this scanner.


#### :material-menu-right-outline:**`execFileNameFilter`**

A pattern that the target input file must match to apply this scanner.

|Type|Default|Category|
|---|---|---|
|String|""|Filter|

Sets a regex pattern to test a file candidate name against.
If the candidate matches any of the extensions, apply this scanner.


### Selector

#### :material-menu-right-outline:**`execSelectorProcess`**

Name of a process to launch whose output whether to apply this input.

|Type|Default|Category|
|---|---|---|
|String|""|Selector|

Define a process name to launch to obtain information about the input file.
In some OSs (e.g., Linux/Unix), executable files do not necessarily have a known extension.
For this, an OS utility such as NIX [file](https://man7.org/linux/man-pages/man1/file.1.html){target="\_blank"} can obtain information on the actual file contents.

If a selector process is not provided the file's ELF/PE/OSX binary header is tested for a possible match.


#### :material-menu-right-outline:**`execSelectorWorkDir`**

The path of the working directory when running 'execSelectorProcess'.

|Type|Default|Category|
|---|---|---|
|String|""|Selector|

Defines the working directory when running [execSelectorProcess](https://doc.log10x.com/compile/scanner/executable/#execselectorprocess "name of a process to launch whose output whether to apply this input").
If omitted, will use the the working directory.


#### :material-menu-right-outline:**`execSelectorArgs`**

List of arguments passed to 'execSelectorProcess'.

|Type|Default|Category|
|---|---|---|
|List|\[\]|Selector|

Defines arguments for the selector process, if provided.
The `file` macro takes the value of the target exec file to launch.


#### :material-menu-right-outline:**`execSelectorTimeout`**

Timeout period after which to terminate 'execSelectorProcess process.

|Type|Default|Category|
|---|---|---|
|String|""|Selector|

Sets how long to allow the selector process to run before termination (e.g. '10s').


#### :material-menu-right-outline:**`execSelectorOutputFilter`**

A filter pattern that must match the output of 'execSelectorProcess' to apply this scanner.

|Type|Default|Category|
|---|---|---|
|String|""|Selector|

Defines a regex pattern to match against the contents of the stdout stream read from the [execSelectorProcess](https://doc.log10x.com/compile/scanner/executable/#execselectorprocess "name of a process to launch whose output whether to apply this input") process.
If matched, apply this scanner to the input file.


### Parse

#### :material-menu-right-outline:**`execSymbolMinLength`**

Minimal length of the string read from 'execProcess' to read as a symbol.

|Type|Default|Category|
|---|---|---|
|Number|0|Parse|

Sets the minimal length a string read from the scanner process
stdout must be to be considered a symbol.


#### :material-menu-right-outline:**`execSymbolMaxLength`**

Max length the string read from 'execProcess' to read as a symbol.

|Type|Default|Category|
|---|---|---|
|Number|0|Parse|

Sets the maximum length a string read from the scanner process
stdout must be to be considered a symbol.


#### :material-menu-right-outline:**`execSymbolFilters`**

Patterns a line read from 'execProcess' must NOT match.

|Type|Default|Category|
|---|---|---|
|List|\[\]|Parse|

defines regex patterns applied to each line read from the scanner process' stdout
that must NOT match for the line value to be captured as a symbol.

For example, to avoid [AWAV binary](https://stackoverflow.com/questions/39322552/meaning-of-a-common-string-in-executables){target="\_blank"} when using the `strings` OS utility, specify:

```yaml
execSymbolFilters:
  -  ^AWAV     
`
```


#### :material-menu-right-outline:**`execSymbolSetSelectors`**

Regex patterns to determines whether to treat an input value as set of tokens.

|Type|Default|Category|
|---|---|---|
|List|\[\]|Parse|

defines regex patterns must ALL matc to treat an input value as a line (e.g., 'error connecting to {}'),
or as a series of independent tokens (e.g., 'error', 'connecting', 'to') to reduce the cardinality and size of the output symbol file.

For example, when processing files that contain values GO compile symbols such as:

```
github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter.group[go.shape.struct
```

Specify the pattern below to break the string into separate symbol tokens (e.g., shape, struct,..):

```yaml
setSelectors: 
- ^(?:github\.com|golang\.org|type:\.eq\.(?:github\.com|golang\.org))(/[a-zA-Z0-9_-]+)*$
- ^[a-zA-Z0-9_/:\.\[\]\*,-]*(?:\.[a-zA-Z0-9]+|\[[a-zA-Z0-9,\.\*/:_-]+\]|-fm)?$
```


#### :material-menu-right-outline:**`execIsStructured`**

Sets whether output lines read from 'execProcess' are read as plain text or structured JSON.

|Type|Default|Category|
|---|---|---|
|String|""|Parse|

Controls whether to read the [execProcess](https://doc.log10x.com/compile/scanner/executable/#execprocess "process to launch for extracting symbol values") stdout as plain text or as a JSON object containing
source context information. If false (default), symbol values
read from the process' output are marked as having an [exec](https://doc.log10x.com/run/transform/symbol/#exec) context.
To learn more about producing structured symbol values, see [SymbolUnit.java](https://github.com/log-10x/pipeline-extensions/blob/main/cloud-extensions/src/main/java/com/log10x/ext/cloud/compile/symbol/SymbolUnit.java){target="\_blank"}.


#### :material-menu-right-outline:**`execSymbolsPrefix`**

A prefix lines read from 'execProcess' must match to parse as structured JSON symbols.

|Type|Default|Category|
|---|---|---|
|Boolean|false|Parse|

Sets a prefix that must precede lines read from the scan process' stdout
to parse as structured JSON symbol trees. Only applies when [execIsStructured](https://doc.log10x.com/compile/scanner/executable/#execisstructured "sets whether output lines read from 'execProcess' are read as plain text or structured JSON") is true.


<br/>:material-github: This module is defined in [executable/module.yaml](https://github.com/log-10x/modules/tree/main/pipelines/compile/modules/scanner/executable/module.yaml "executable/module.yaml"){target="\_blank"}.

