Executable Scanner
Launches a subprocess to extract symbol values from source code or binary files.
Supports OS utilities like strings 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 and assigns each value an exec context. See the strings configuration example below.
Structured
Parses JSON objects from stdout containing hierarchical symbol trees with context metadata (class, function, enum names). See SymbolUnit.java for an example.
Configuration
To configure the Executable scanner module, Edit these settings.
Below is the default configuration from: executable/strings-nix.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiZXhlYyIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJuYW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBsb2dpY2FsIG5hbWUgZm9yIHRoaXMgZXhlYyBzY2FubmVyXG5cbkEgbG9naWNhbCBuYW1lIGZvciB0aGlzIGV4ZWMgc2Nhbm5lciB1bmlxdWUgYW1vbmdzdCBhbGwgc3BlY2lmaWVkIHNjYW5uZXIgb3B0aW9uIGdyb3VwcyAoZS5nLiwgJ3N0cmluZ3NOSVgnKSIKICAgICAgICAgIH0sCiAgICAgICAgICAib3NGaWx0ZXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIHRoZSBob3N0IE9TIHRvIGFwcGx5IHRoaXMgc2Nhbm5lci5cblxuRGVmaW5lcyBhIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdCB0aGUgbmFtZSBvZiB0aGUgaG9zdCBPUyB0byBkZXRlcm1pbmUgd2hldGhlciB0byBhcHBseSB0aGlzIHNjYW5uZXIuIgogICAgICAgICAgfSwKICAgICAgICAgICJleHRlbnNpb25zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIGxpc3Qgb2YgZmlsZSBleHRlbnNpb25zIGEgdGFyZ2V0IGZpbGUgbXVzdCBtYXRjaCB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuQW4gYXJyYXkgb2YgZmlsZSBleHRlbnNpb25zIHRvIHRlc3QgYSBmaWxlIGNhbmRpZGF0ZSBhZ2FpbnN0LiBJZiB0aGUgY2FuZGlkYXRlIG1hdGNoZXMgYW55IGV4dGVuc2lvbnMsIGFwcGx5IHRoaXMgc2Nhbm5lci4iLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZmlsZU5hbWVGaWx0ZXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCB0aGUgdGFyZ2V0IGlucHV0IGZpbGUgbXVzdCBtYXRjaCB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuU2V0cyBhIHJlZ2V4IHBhdHRlcm4gdG8gdGVzdCBhIGZpbGUgY2FuZGlkYXRlIG5hbWUgYWdhaW5zdC4gSWYgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIGFueSBvZiB0aGUgZXh0ZW5zaW9ucywgYXBwbHkgdGhpcyBzY2FubmVyLiIKICAgICAgICAgIH0sCiAgICAgICAgICAic2VsZWN0b3IiIDogewogICAgICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICAgInByb2Nlc3MiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk5hbWUgb2YgYSBwcm9jZXNzIHRvIGxhdW5jaCB3aG9zZSBvdXRwdXQgd2hldGhlciB0byBhcHBseSB0aGlzIGlucHV0XG5cbkRlZmluZSBhIHByb2Nlc3MgbmFtZSB0byBsYXVuY2ggdG8gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnB1dCBmaWxlLiBJbiBzb21lIE9TcyAoZS5nLiwgTGludXgvVW5peCksIGV4ZWN1dGFibGUgZmlsZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgYSBrbm93biBleHRlbnNpb24uIEZvciB0aGlzLCBhbiBPUyB1dGlsaXR5IHN1Y2ggYXMgTklYIFtmaWxlXShodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW4xL2ZpbGUuMS5odG1sKSBjYW4gb2J0YWluIGluZm9ybWF0aW9uIG9uIHRoZSBhY3R1YWwgZmlsZSBjb250ZW50cy4gIElmIGEgc2VsZWN0b3IgcHJvY2VzcyBpcyBub3QgcHJvdmlkZWQgdGhlIGZpbGUncyBFTEYvUEUvT1NYIGJpbmFyeSBoZWFkZXIgaXMgdGVzdGVkIGZvciBhIHBvc3NpYmxlIG1hdGNoLiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJ3b3JrRGlyIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaGUgcGF0aCBvZiB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nICdleGVjU2VsZWN0b3JQcm9jZXNzJ1xuXG5EZWZpbmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIHJ1bm5pbmcgW2V4ZWNTZWxlY3RvclByb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNzZWxlY3RvcnByb2Nlc3MpLiBJZiBvbWl0dGVkLCB3aWxsIHVzZSB0aGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJhcmdzIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgYXJndW1lbnRzIHBhc3NlZCB0byAnZXhlY1NlbGVjdG9yUHJvY2VzcydcblxuRGVmaW5lcyBhcmd1bWVudHMgZm9yIHRoZSBzZWxlY3RvciBwcm9jZXNzLCBpZiBwcm92aWRlZC4gVGhlIGBmaWxlYCBtYWNybyB0YWtlcyB0aGUgdmFsdWUgb2YgdGhlIHRhcmdldCBleGVjIGZpbGUgdG8gbGF1bmNoLiIsCiAgICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInRpbWVvdXQiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRpbWVvdXQgcGVyaW9kIGFmdGVyIHdoaWNoIHRvIHRlcm1pbmF0ZSAnZXhlY1NlbGVjdG9yUHJvY2VzcyBwcm9jZXNzXG5cblNldHMgaG93IGxvbmcgdG8gYWxsb3cgdGhlIHNlbGVjdG9yIHByb2Nlc3MgdG8gcnVuIGJlZm9yZSB0ZXJtaW5hdGlvbiAoZS5nLiAnMTBzJykiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAib3V0cHV0RmlsdGVyIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIGZpbHRlciBwYXR0ZXJuIHRoYXQgbXVzdCBtYXRjaCB0aGUgb3V0cHV0IG9mICdleGVjU2VsZWN0b3JQcm9jZXNzJyB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuRGVmaW5lcyBhIHJlZ2V4IHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdCB0aGUgY29udGVudHMgb2YgdGhlIHN0ZG91dCBzdHJlYW0gcmVhZCBmcm9tIHRoZSBbZXhlY1NlbGVjdG9yUHJvY2Vzc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvZXhlY3V0YWJsZS8jZXhlY3NlbGVjdG9ycHJvY2VzcykgcHJvY2Vzcy4gSWYgbWF0Y2hlZCwgYXBwbHkgdGhpcyBzY2FubmVyIHRvIHRoZSBpbnB1dCBmaWxlLiIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAicHJvY2VzcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlByb2Nlc3MgdG8gbGF1bmNoIGZvciBleHRyYWN0aW5nIHN5bWJvbCB2YWx1ZXNcblxuRGVmaW5lcyBhIHByb2Nlc3MgdG8gbGF1bmNoIGFuZCB3aG9zZSBzdGRvdXQgcGlwZSB0byBwYXJzZSBmb3Igc3ltYm9sIHZhbHVlcy4iCiAgICAgICAgICB9LAogICAgICAgICAgIndvcmtEaXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaGUgcGF0aCBvZiB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nICdleGVjUHJvY2VzcydcblxuRGVmaW5lcyB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nIFtleGVjUHJvY2Vzc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvZXhlY3V0YWJsZS8jZXhlY3Byb2Nlc3MpLiBJZiBvbWl0dGVkLCB1c2VzIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4iCiAgICAgICAgICB9LAogICAgICAgICAgImFyZ3MiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgYXJndW1lbnRzIHBhc3NlZCB0byAnZXhlY1Byb2Nlc3MnICgnZmlsZScgaXMgcmVwbGFjZWQgYnkgc2NhbiB0YXJnZXQpXG5cbkRlZmluZXMgbGF1bmNoIGFyZ3VtZW50cyBbZXhlY1Byb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNwcm9jZXNzKS4gVGhlIGBmaWxlYCBtYWNybyBleHBhbmRzIGludG8gdGhlIGlucHV0IGZpbGUgcGF0aCIsCiAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJ0aW1lb3V0IiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiVGltZW91dCBwZXJpb2QgYWZ0ZXIgd2hpY2ggdG8gdGVybWluYXRlICdleGVjUHJvY2VzcycgcHJvY2Vzc1xuXG5EZWZpbmVzIGhvdyBsb25nIFtleGVjUHJvY2Vzc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvZXhlY3V0YWJsZS8jZXhlY3Byb2Nlc3MpIGlzIGFsbG93ZWQgdG8gcnVuIGJlZm9yZSB0ZXJtaW5hdGlvbiIKICAgICAgICAgIH0sCiAgICAgICAgICAic3ltYm9sIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAgICJtaW5MZW5ndGgiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWluaW1hbCBsZW5ndGggb2YgdGhlIHN0cmluZyByZWFkIGZyb20gJ2V4ZWNQcm9jZXNzJyB0byByZWFkIGFzIGEgc3ltYm9sXG5cblNldHMgdGhlIG1pbmltYWwgbGVuZ3RoIGEgc3RyaW5nIHJlYWQgZnJvbSB0aGUgc2Nhbm5lciBwcm9jZXNzIHN0ZG91dCBtdXN0IGJlIHRvIGJlIGNvbnNpZGVyZWQgYSBzeW1ib2wgKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJtYXhMZW5ndGgiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWF4IGxlbmd0aCB0aGUgc3RyaW5nIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIHRvIHJlYWQgYXMgYSBzeW1ib2xcblxuU2V0cyB0aGUgbWF4aW11bSBsZW5ndGggYSBzdHJpbmcgcmVhZCBmcm9tIHRoZSBzY2FubmVyIHByb2Nlc3Mgc3Rkb3V0IG11c3QgYmUgdG8gYmUgY29uc2lkZXJlZCBhIHN5bWJvbCAoQWNjZXB0cyBudW1iZXIgb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImZpbHRlcnMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGF0dGVybnMgYSBsaW5lIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIG11c3QgTk9UIG1hdGNoXG5cbkRlZmluZXMgcmVnZXggcGF0dGVybnMgYXBwbGllZCB0byBlYWNoIGxpbmUgcmVhZCBmcm9tIHRoZSBzY2FubmVyIHByb2Nlc3MnIHN0ZG91dCB0aGF0IG11c3QgTk9UIG1hdGNoIGZvciB0aGUgbGluZSB2YWx1ZSB0byBiZSBjYXB0dXJlZCBhcyBhIHN5bWJvbC4gICBGb3IgZXhhbXBsZSwgdG8gYXZvaWQgW0FXQVYgYmluYXJ5XShodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zOTMyMjU1Mi9tZWFuaW5nLW9mLWEtY29tbW9uLXN0cmluZy1pbi1leGVjdXRhYmxlcykgd2hlbiB1c2luZyB0aGUgYHN0cmluZ3NgIE9TIHV0aWxpdHksIHNwZWNpZnk6ICBgYGAgeWFtbCBleGVjU3ltYm9sRmlsdGVyczogICAtICBeQVdBViAgICAgIGBgYGAiLAogICAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJzZXRTZWxlY3RvcnMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUmVnZXggcGF0dGVybnMgdG8gZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHRyZWF0IGFuIGlucHV0IHZhbHVlIGFzIHNldCBvZiB0b2tlbnNcblxuRGVmaW5lcyByZWdleCBwYXR0ZXJucyBtdXN0IEFMTCBtYXRjIHRvIHRyZWF0IGFuIGlucHV0IHZhbHVlIGFzIGEgbGluZSAoZS5nLiwgJ2Vycm9yIGNvbm5lY3RpbmcgdG8ge30nKSwgb3IgYXMgYSBzZXJpZXMgb2YgaW5kZXBlbmRlbnQgdG9rZW5zIChlLmcuLCAnZXJyb3InLCAnY29ubmVjdGluZycsICd0bycpIHRvIHJlZHVjZSB0aGUgY2FyZGluYWxpdHkgYW5kIHNpemUgb2YgdGhlIG91dHB1dCBzeW1ib2wgZmlsZS4gICBGb3IgZXhhbXBsZSwgd2hlbiBwcm9jZXNzaW5nIGZpbGVzIHRoYXQgY29udGFpbiB2YWx1ZXMgR08gY29tcGlsZSBzeW1ib2xzIHN1Y2ggYXM6ICAgYGBgIGdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9leHBvcnRlci9maWxlZXhwb3J0ZXIuZ3JvdXBbZ28uc2hhcGUuc3RydWN0IGBgYCAgU3BlY2lmeSB0aGUgcGF0dGVybiBiZWxvdyB0byBicmVhayB0aGUgc3RyaW5nIGludG8gc2VwYXJhdGUgc3ltYm9sIHRva2VucyAoZS5nLiwgc2hhcGUsIHN0cnVjdCwuLik6ICAgYGBgIHlhbWwgc2V0U2VsZWN0b3JzOiAgLSBeKD86Z2l0aHViXFwuY29tfGdvbGFuZ1xcLm9yZ3x0eXBlOlxcLmVxXFwuKD86Z2l0aHViXFwuY29tfGdvbGFuZ1xcLm9yZykpKC9bYS16QS1aMC05Xy1dKykqJCAtIF5bYS16QS1aMC05Xy86XFwuXFxbXFxdXFwqLC1dKig/OlxcLlthLXpBLVowLTldK3xcXFtbYS16QS1aMC05LFxcLlxcKi86Xy1dK1xcXXwtZm0pPyQgYGBgIiwKICAgICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlzU3RydWN0dXJlZCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlNldHMgd2hldGhlciBvdXRwdXQgbGluZXMgcmVhZCBmcm9tICdleGVjUHJvY2VzcycgYXJlIHJlYWQgYXMgcGxhaW4gdGV4dCBvciBzdHJ1Y3R1cmVkIEpTT05cblxuQ29udHJvbHMgd2hldGhlciB0byByZWFkIHRoZSBbZXhlY1Byb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNwcm9jZXNzKSBzdGRvdXQgYXMgcGxhaW4gdGV4dCBvciBhcyBhIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgc291cmNlIGNvbnRleHQgaW5mb3JtYXRpb24uIElmIGZhbHNlIChkZWZhdWx0KSwgc3ltYm9sIHZhbHVlcyByZWFkIGZyb20gdGhlIHByb2Nlc3MnIG91dHB1dCBhcmUgbWFya2VkIGFzIGhhdmluZyBhbiBbZXhlY10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jZXhlYykgY29udGV4dC4gVG8gbGVhcm4gbW9yZSBhYm91dCBwcm9kdWNpbmcgc3RydWN0dXJlZCBzeW1ib2wgdmFsdWVzLCBzZWUgW1N5bWJvbFVuaXQuamF2YV0oaHR0cHM6Ly9naXRodWIuY29tL2xvZy0xMHgvcGlwZWxpbmUtZXh0ZW5zaW9ucy9ibG9iL21haW4vY2xvdWQtZXh0ZW5zaW9ucy9zcmMvbWFpbi9qYXZhL2NvbS9sb2cxMHgvZXh0L2Nsb3VkL2NvbXBpbGUvc3ltYm9sL1N5bWJvbFVuaXQuamF2YSkiCiAgICAgICAgICB9LAogICAgICAgICAgInN5bWJvbHNQcmVmaXgiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAgICJzdHJpbmciCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHByZWZpeCBsaW5lcyByZWFkIGZyb20gJ2V4ZWNQcm9jZXNzJyBtdXN0IG1hdGNoIHRvIHBhcnNlIGFzIHN0cnVjdHVyZWQgSlNPTiBzeW1ib2xzXG5cblNldHMgYSBwcmVmaXggdGhhdCBtdXN0IHByZWNlZGUgbGluZXMgcmVhZCBmcm9tIHRoZSBzY2FuIHByb2Nlc3MnIHN0ZG91dCB0byBwYXJzZSBhcyBzdHJ1Y3R1cmVkIEpTT04gc3ltYm9sIHRyZWVzLiBPbmx5IGFwcGxpZXMgd2hlbiBbZXhlY0lzU3RydWN0dXJlZF0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvZXhlY3V0YWJsZS8jZXhlY2lzc3RydWN0dXJlZCkgaXMgdHJ1ZSAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJyZXF1aXJlZCIgOiBbCiAgICAgICAgICAibmFtZSIsCiAgICAgICAgICAib3NGaWx0ZXIiCiAgICAgICAgXQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# # 🔟❎ '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)
Below is the default configuration from: executable/strings-win.yaml.
ewogICJ0eXBlIiA6ICJvYmplY3QiLAogICJwcm9wZXJ0aWVzIiA6IHsKICAgICJ0ZW54IiA6IHsKICAgICAgInR5cGUiIDogInN0cmluZyIKICAgIH0sCiAgICAiZXhlYyIgOiB7CiAgICAgICJ0eXBlIiA6ICJhcnJheSIsCiAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICJwcm9wZXJ0aWVzIiA6IHsKICAgICAgICAgICJuYW1lIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiQSBsb2dpY2FsIG5hbWUgZm9yIHRoaXMgZXhlYyBzY2FubmVyXG5cbkEgbG9naWNhbCBuYW1lIGZvciB0aGlzIGV4ZWMgc2Nhbm5lciB1bmlxdWUgYW1vbmdzdCBhbGwgc3BlY2lmaWVkIHNjYW5uZXIgb3B0aW9uIGdyb3VwcyAoZS5nLiwgJ3N0cmluZ3NOSVgnKSIKICAgICAgICAgIH0sCiAgICAgICAgICAib3NGaWx0ZXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIHRoZSBob3N0IE9TIHRvIGFwcGx5IHRoaXMgc2Nhbm5lci5cblxuRGVmaW5lcyBhIHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdCB0aGUgbmFtZSBvZiB0aGUgaG9zdCBPUyB0byBkZXRlcm1pbmUgd2hldGhlciB0byBhcHBseSB0aGlzIHNjYW5uZXIuIgogICAgICAgICAgfSwKICAgICAgICAgICJleHRlbnNpb25zIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJhcnJheSIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIGxpc3Qgb2YgZmlsZSBleHRlbnNpb25zIGEgdGFyZ2V0IGZpbGUgbXVzdCBtYXRjaCB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuQW4gYXJyYXkgb2YgZmlsZSBleHRlbnNpb25zIHRvIHRlc3QgYSBmaWxlIGNhbmRpZGF0ZSBhZ2FpbnN0LiBJZiB0aGUgY2FuZGlkYXRlIG1hdGNoZXMgYW55IGV4dGVuc2lvbnMsIGFwcGx5IHRoaXMgc2Nhbm5lci4iLAogICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiZmlsZU5hbWVGaWx0ZXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHBhdHRlcm4gdGhhdCB0aGUgdGFyZ2V0IGlucHV0IGZpbGUgbXVzdCBtYXRjaCB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuU2V0cyBhIHJlZ2V4IHBhdHRlcm4gdG8gdGVzdCBhIGZpbGUgY2FuZGlkYXRlIG5hbWUgYWdhaW5zdC4gSWYgdGhlIGNhbmRpZGF0ZSBtYXRjaGVzIGFueSBvZiB0aGUgZXh0ZW5zaW9ucywgYXBwbHkgdGhpcyBzY2FubmVyLiIKICAgICAgICAgIH0sCiAgICAgICAgICAic2VsZWN0b3IiIDogewogICAgICAgICAgICAidHlwZSIgOiAib2JqZWN0IiwKICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiA6IGZhbHNlLAogICAgICAgICAgICAicHJvcGVydGllcyIgOiB7CiAgICAgICAgICAgICAgInByb2Nlc3MiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIk5hbWUgb2YgYSBwcm9jZXNzIHRvIGxhdW5jaCB3aG9zZSBvdXRwdXQgd2hldGhlciB0byBhcHBseSB0aGlzIGlucHV0XG5cbkRlZmluZSBhIHByb2Nlc3MgbmFtZSB0byBsYXVuY2ggdG8gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnB1dCBmaWxlLiBJbiBzb21lIE9TcyAoZS5nLiwgTGludXgvVW5peCksIGV4ZWN1dGFibGUgZmlsZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgYSBrbm93biBleHRlbnNpb24uIEZvciB0aGlzLCBhbiBPUyB1dGlsaXR5IHN1Y2ggYXMgTklYIFtmaWxlXShodHRwczovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW4xL2ZpbGUuMS5odG1sKSBjYW4gb2J0YWluIGluZm9ybWF0aW9uIG9uIHRoZSBhY3R1YWwgZmlsZSBjb250ZW50cy4gIElmIGEgc2VsZWN0b3IgcHJvY2VzcyBpcyBub3QgcHJvdmlkZWQgdGhlIGZpbGUncyBFTEYvUEUvT1NYIGJpbmFyeSBoZWFkZXIgaXMgdGVzdGVkIGZvciBhIHBvc3NpYmxlIG1hdGNoLiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJ3b3JrRGlyIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaGUgcGF0aCBvZiB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nICdleGVjU2VsZWN0b3JQcm9jZXNzJ1xuXG5EZWZpbmVzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVuIHJ1bm5pbmcgW2V4ZWNTZWxlY3RvclByb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNzZWxlY3RvcnByb2Nlc3MpLiBJZiBvbWl0dGVkLCB3aWxsIHVzZSB0aGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LiIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJhcmdzIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgYXJndW1lbnRzIHBhc3NlZCB0byAnZXhlY1NlbGVjdG9yUHJvY2VzcydcblxuRGVmaW5lcyBhcmd1bWVudHMgZm9yIHRoZSBzZWxlY3RvciBwcm9jZXNzLCBpZiBwcm92aWRlZC4gVGhlIGBmaWxlYCBtYWNybyB0YWtlcyB0aGUgdmFsdWUgb2YgdGhlIHRhcmdldCBleGVjIGZpbGUgdG8gbGF1bmNoLiIsCiAgICAgICAgICAgICAgICAiaXRlbXMiIDogewogICAgICAgICAgICAgICAgICAidHlwZSIgOiAic3RyaW5nIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInRpbWVvdXQiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlRpbWVvdXQgcGVyaW9kIGFmdGVyIHdoaWNoIHRvIHRlcm1pbmF0ZSAnZXhlY1NlbGVjdG9yUHJvY2VzcyBwcm9jZXNzXG5cblNldHMgaG93IGxvbmcgdG8gYWxsb3cgdGhlIHNlbGVjdG9yIHByb2Nlc3MgdG8gcnVuIGJlZm9yZSB0ZXJtaW5hdGlvbiAoZS5nLiAnMTBzJykiCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAib3V0cHV0RmlsdGVyIiA6IHsKICAgICAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIGZpbHRlciBwYXR0ZXJuIHRoYXQgbXVzdCBtYXRjaCB0aGUgb3V0cHV0IG9mICdleGVjU2VsZWN0b3JQcm9jZXNzJyB0byBhcHBseSB0aGlzIHNjYW5uZXJcblxuRGVmaW5lcyBhIHJlZ2V4IHBhdHRlcm4gdG8gbWF0Y2ggYWdhaW5zdCB0aGUgY29udGVudHMgb2YgdGhlIHN0ZG91dCBzdHJlYW0gcmVhZCBmcm9tIHRoZSBbZXhlY1NlbGVjdG9yUHJvY2Vzc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvZXhlY3V0YWJsZS8jZXhlY3NlbGVjdG9ycHJvY2VzcykgcHJvY2Vzcy4gSWYgbWF0Y2hlZCwgYXBwbHkgdGhpcyBzY2FubmVyIHRvIHRoZSBpbnB1dCBmaWxlLiIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAicHJvY2VzcyIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlByb2Nlc3MgdG8gbGF1bmNoIGZvciBleHRyYWN0aW5nIHN5bWJvbCB2YWx1ZXNcblxuRGVmaW5lcyBhIHByb2Nlc3MgdG8gbGF1bmNoIGFuZCB3aG9zZSBzdGRvdXQgcGlwZSB0byBwYXJzZSBmb3Igc3ltYm9sIHZhbHVlcy4iCiAgICAgICAgICB9LAogICAgICAgICAgIndvcmtEaXIiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgInN0cmluZyIsCiAgICAgICAgICAgICAgIm51bGwiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJUaGUgcGF0aCBvZiB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nICdleGVjUHJvY2VzcydcblxuRGVmaW5lcyB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlbiBydW5uaW5nIFtleGVjUHJvY2Vzc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvZXhlY3V0YWJsZS8jZXhlY3Byb2Nlc3MpLiBJZiBvbWl0dGVkLCB1c2VzIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4iCiAgICAgICAgICB9LAogICAgICAgICAgImFyZ3MiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIkxpc3Qgb2YgYXJndW1lbnRzIHBhc3NlZCB0byAnZXhlY1Byb2Nlc3MnICgnZmlsZScgaXMgcmVwbGFjZWQgYnkgc2NhbiB0YXJnZXQpXG5cbkRlZmluZXMgbGF1bmNoIGFyZ3VtZW50cyBbZXhlY1Byb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNwcm9jZXNzKS4gVGhlIGBmaWxlYCBtYWNybyBleHBhbmRzIGludG8gdGhlIGlucHV0IGZpbGUgcGF0aCIsCiAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICJ0aW1lb3V0IiA6IHsKICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICJzdHJpbmciLAogICAgICAgICAgICAgICJudWxsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiVGltZW91dCBwZXJpb2QgYWZ0ZXIgd2hpY2ggdG8gdGVybWluYXRlICdleGVjUHJvY2VzcycgcHJvY2Vzc1xuXG5EZWZpbmVzIGhvdyBsb25nIFtleGVjUHJvY2Vzc10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvZXhlY3V0YWJsZS8jZXhlY3Byb2Nlc3MpIGlzIGFsbG93ZWQgdG8gcnVuIGJlZm9yZSB0ZXJtaW5hdGlvbiIKICAgICAgICAgIH0sCiAgICAgICAgICAic3ltYm9sIiA6IHsKICAgICAgICAgICAgInR5cGUiIDogIm9iamVjdCIsCiAgICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyIgOiBmYWxzZSwKICAgICAgICAgICAgInByb3BlcnRpZXMiIDogewogICAgICAgICAgICAgICJtaW5MZW5ndGgiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWluaW1hbCBsZW5ndGggb2YgdGhlIHN0cmluZyByZWFkIGZyb20gJ2V4ZWNQcm9jZXNzJyB0byByZWFkIGFzIGEgc3ltYm9sXG5cblNldHMgdGhlIG1pbmltYWwgbGVuZ3RoIGEgc3RyaW5nIHJlYWQgZnJvbSB0aGUgc2Nhbm5lciBwcm9jZXNzIHN0ZG91dCBtdXN0IGJlIHRvIGJlIGNvbnNpZGVyZWQgYSBzeW1ib2wgKEFjY2VwdHMgbnVtYmVyIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJtYXhMZW5ndGgiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAibnVtYmVyIiwKICAgICAgICAgICAgICAgICAgInN0cmluZyIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiTWF4IGxlbmd0aCB0aGUgc3RyaW5nIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIHRvIHJlYWQgYXMgYSBzeW1ib2xcblxuU2V0cyB0aGUgbWF4aW11bSBsZW5ndGggYSBzdHJpbmcgcmVhZCBmcm9tIHRoZSBzY2FubmVyIHByb2Nlc3Mgc3Rkb3V0IG11c3QgYmUgdG8gYmUgY29uc2lkZXJlZCBhIHN5bWJvbCAoQWNjZXB0cyBudW1iZXIgb3Igc3RyaW5nIHdpdGggJD0gcHJlZml4IGZvciBydW50aW1lIGV2YWx1YXRpb24pIgogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgImZpbHRlcnMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUGF0dGVybnMgYSBsaW5lIHJlYWQgZnJvbSAnZXhlY1Byb2Nlc3MnIG11c3QgTk9UIG1hdGNoXG5cbkRlZmluZXMgcmVnZXggcGF0dGVybnMgYXBwbGllZCB0byBlYWNoIGxpbmUgcmVhZCBmcm9tIHRoZSBzY2FubmVyIHByb2Nlc3MnIHN0ZG91dCB0aGF0IG11c3QgTk9UIG1hdGNoIGZvciB0aGUgbGluZSB2YWx1ZSB0byBiZSBjYXB0dXJlZCBhcyBhIHN5bWJvbC4gICBGb3IgZXhhbXBsZSwgdG8gYXZvaWQgW0FXQVYgYmluYXJ5XShodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zOTMyMjU1Mi9tZWFuaW5nLW9mLWEtY29tbW9uLXN0cmluZy1pbi1leGVjdXRhYmxlcykgd2hlbiB1c2luZyB0aGUgYHN0cmluZ3NgIE9TIHV0aWxpdHksIHNwZWNpZnk6ICBgYGAgeWFtbCBleGVjU3ltYm9sRmlsdGVyczogICAtICBeQVdBViAgICAgIGBgYGAiLAogICAgICAgICAgICAgICAgIml0ZW1zIiA6IHsKICAgICAgICAgICAgICAgICAgInR5cGUiIDogInN0cmluZyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJzZXRTZWxlY3RvcnMiIDogewogICAgICAgICAgICAgICAgInR5cGUiIDogWwogICAgICAgICAgICAgICAgICAiYXJyYXkiLAogICAgICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAibWFya2Rvd25EZXNjcmlwdGlvbiIgOiAiUmVnZXggcGF0dGVybnMgdG8gZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHRyZWF0IGFuIGlucHV0IHZhbHVlIGFzIHNldCBvZiB0b2tlbnNcblxuRGVmaW5lcyByZWdleCBwYXR0ZXJucyBtdXN0IEFMTCBtYXRjIHRvIHRyZWF0IGFuIGlucHV0IHZhbHVlIGFzIGEgbGluZSAoZS5nLiwgJ2Vycm9yIGNvbm5lY3RpbmcgdG8ge30nKSwgb3IgYXMgYSBzZXJpZXMgb2YgaW5kZXBlbmRlbnQgdG9rZW5zIChlLmcuLCAnZXJyb3InLCAnY29ubmVjdGluZycsICd0bycpIHRvIHJlZHVjZSB0aGUgY2FyZGluYWxpdHkgYW5kIHNpemUgb2YgdGhlIG91dHB1dCBzeW1ib2wgZmlsZS4gICBGb3IgZXhhbXBsZSwgd2hlbiBwcm9jZXNzaW5nIGZpbGVzIHRoYXQgY29udGFpbiB2YWx1ZXMgR08gY29tcGlsZSBzeW1ib2xzIHN1Y2ggYXM6ICAgYGBgIGdpdGh1Yi5jb20vb3Blbi10ZWxlbWV0cnkvb3BlbnRlbGVtZXRyeS1jb2xsZWN0b3ItY29udHJpYi9leHBvcnRlci9maWxlZXhwb3J0ZXIuZ3JvdXBbZ28uc2hhcGUuc3RydWN0IGBgYCAgU3BlY2lmeSB0aGUgcGF0dGVybiBiZWxvdyB0byBicmVhayB0aGUgc3RyaW5nIGludG8gc2VwYXJhdGUgc3ltYm9sIHRva2VucyAoZS5nLiwgc2hhcGUsIHN0cnVjdCwuLik6ICAgYGBgIHlhbWwgc2V0U2VsZWN0b3JzOiAgLSBeKD86Z2l0aHViXFwuY29tfGdvbGFuZ1xcLm9yZ3x0eXBlOlxcLmVxXFwuKD86Z2l0aHViXFwuY29tfGdvbGFuZ1xcLm9yZykpKC9bYS16QS1aMC05Xy1dKykqJCAtIF5bYS16QS1aMC05Xy86XFwuXFxbXFxdXFwqLC1dKig/OlxcLlthLXpBLVowLTldK3xcXFtbYS16QS1aMC05LFxcLlxcKi86Xy1dK1xcXXwtZm0pPyQgYGBgIiwKICAgICAgICAgICAgICAgICJpdGVtcyIgOiB7CiAgICAgICAgICAgICAgICAgICJ0eXBlIiA6ICJzdHJpbmciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgImlzU3RydWN0dXJlZCIgOiB7CiAgICAgICAgICAgICJ0eXBlIiA6IFsKICAgICAgICAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAibnVsbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgIm1hcmtkb3duRGVzY3JpcHRpb24iIDogIlNldHMgd2hldGhlciBvdXRwdXQgbGluZXMgcmVhZCBmcm9tICdleGVjUHJvY2VzcycgYXJlIHJlYWQgYXMgcGxhaW4gdGV4dCBvciBzdHJ1Y3R1cmVkIEpTT05cblxuQ29udHJvbHMgd2hldGhlciB0byByZWFkIHRoZSBbZXhlY1Byb2Nlc3NdKGh0dHBzOi8vZG9jLmxvZzEweC5jb20vY29tcGlsZS9zY2FubmVyL2V4ZWN1dGFibGUvI2V4ZWNwcm9jZXNzKSBzdGRvdXQgYXMgcGxhaW4gdGV4dCBvciBhcyBhIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgc291cmNlIGNvbnRleHQgaW5mb3JtYXRpb24uIElmIGZhbHNlIChkZWZhdWx0KSwgc3ltYm9sIHZhbHVlcyByZWFkIGZyb20gdGhlIHByb2Nlc3MnIG91dHB1dCBhcmUgbWFya2VkIGFzIGhhdmluZyBhbiBbZXhlY10oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9ydW4vdHJhbnNmb3JtL3N5bWJvbC8jZXhlYykgY29udGV4dC4gVG8gbGVhcm4gbW9yZSBhYm91dCBwcm9kdWNpbmcgc3RydWN0dXJlZCBzeW1ib2wgdmFsdWVzLCBzZWUgW1N5bWJvbFVuaXQuamF2YV0oaHR0cHM6Ly9naXRodWIuY29tL2xvZy0xMHgvcGlwZWxpbmUtZXh0ZW5zaW9ucy9ibG9iL21haW4vY2xvdWQtZXh0ZW5zaW9ucy9zcmMvbWFpbi9qYXZhL2NvbS9sb2cxMHgvZXh0L2Nsb3VkL2NvbXBpbGUvc3ltYm9sL1N5bWJvbFVuaXQuamF2YSkiCiAgICAgICAgICB9LAogICAgICAgICAgInN5bWJvbHNQcmVmaXgiIDogewogICAgICAgICAgICAidHlwZSIgOiBbCiAgICAgICAgICAgICAgImJvb2xlYW4iLAogICAgICAgICAgICAgICJzdHJpbmciCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJtYXJrZG93bkRlc2NyaXB0aW9uIiA6ICJBIHByZWZpeCBsaW5lcyByZWFkIGZyb20gJ2V4ZWNQcm9jZXNzJyBtdXN0IG1hdGNoIHRvIHBhcnNlIGFzIHN0cnVjdHVyZWQgSlNPTiBzeW1ib2xzXG5cblNldHMgYSBwcmVmaXggdGhhdCBtdXN0IHByZWNlZGUgbGluZXMgcmVhZCBmcm9tIHRoZSBzY2FuIHByb2Nlc3MnIHN0ZG91dCB0byBwYXJzZSBhcyBzdHJ1Y3R1cmVkIEpTT04gc3ltYm9sIHRyZWVzLiBPbmx5IGFwcGxpZXMgd2hlbiBbZXhlY0lzU3RydWN0dXJlZF0oaHR0cHM6Ly9kb2MubG9nMTB4LmNvbS9jb21waWxlL3NjYW5uZXIvZXhlY3V0YWJsZS8jZXhlY2lzc3RydWN0dXJlZCkgaXMgdHJ1ZSAoQWNjZXB0cyBib29sZWFuIG9yIHN0cmluZyB3aXRoICQ9IHByZWZpeCBmb3IgcnVudGltZSBldmFsdWF0aW9uKSIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJyZXF1aXJlZCIgOiBbCiAgICAgICAgICAibmFtZSIsCiAgICAgICAgICAib3NGaWx0ZXIiCiAgICAgICAgXQogICAgICB9CiAgICB9CiAgfSwKICAiYWRkaXRpb25hbFByb3BlcnRpZXMiIDogZmFsc2UKfQ==
# # 🔟❎ '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
Options
Specify the options below to configure multiple Executable scanner:
| Name | Description | Category |
|---|---|---|
| execName | A logical name for this exec scanner | Scanner |
| execProcess | Process to launch for extracting symbol values | Scanner |
| execWorkDir | The path of the working directory when running 'execProcess' | Scanner |
| execArgs | List of arguments passed to 'execProcess' ('file' is replaced by scan target) | Scanner |
| execTimeout | Timeout period after which to terminate 'execProcess' process | Scanner |
| execOsFilter | A pattern that must match the name of the host OS to apply this scanner. | Filter |
| execExtensions | A list of file extensions a target file must match to apply this scanner | Filter |
| execFileNameFilter | A pattern that the target input file must match to apply this scanner | Filter |
| execSelectorProcess | Name of a process to launch whose output whether to apply this input | Selector |
| execSelectorWorkDir | The path of the working directory when running 'execSelectorProcess' | Selector |
| execSelectorArgs | List of arguments passed to 'execSelectorProcess' | Selector |
| execSelectorTimeout | Timeout period after which to terminate 'execSelectorProcess process | Selector |
| execSelectorOutputFilter | A filter pattern that must match the output of 'execSelectorProcess' to apply this scanner | Selector |
| execSymbolMinLength | Minimal length of the string read from 'execProcess' to read as a symbol | Parse |
| execSymbolMaxLength | Max length the string read from 'execProcess' to read as a symbol | Parse |
| execSymbolFilters | Patterns a line read from 'execProcess' must NOT match | Parse |
| execSymbolSetSelectors | Regex patterns to determines whether to treat an input value as set of tokens | Parse |
| execIsStructured | Sets whether output lines read from 'execProcess' are read as plain text or structured JSON | Parse |
| execSymbolsPrefix | A prefix lines read from 'execProcess' must match to parse as structured JSON symbols | Parse |
Scanner
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').
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.
execWorkDir
The path of the working directory when running 'execProcess'.
| Type | Default | Category |
|---|---|---|
| String | "" | Scanner |
Defines the working directory when running execProcess. If omitted, uses the working directory.
execArgs
List of arguments passed to 'execProcess' ('file' is replaced by scan target).
| Type | Default | Category |
|---|---|---|
| List | [] | Scanner |
Defines launch arguments execProcess.
The file macro expands into the input file path.
execTimeout
Timeout period after which to terminate 'execProcess' process.
| Type | Default | Category |
|---|---|---|
| String | "" | Scanner |
Defines how long execProcess is allowed to run before termination.
Filter
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.
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.
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
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 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.
execSelectorWorkDir
The path of the working directory when running 'execSelectorProcess'.
| Type | Default | Category |
|---|---|---|
| String | "" | Selector |
Defines the working directory when running execSelectorProcess. If omitted, will use the the working directory.
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.
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').
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 process. If matched, apply this scanner to the input file.
Parse
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.
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.
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 when using the strings OS utility, specify:
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,..):
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)?$
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 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 context. To learn more about producing structured symbol values, see SymbolUnit.java.
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 is true.
This module is defined in executable/module.yaml.