{"id":26052545,"url":"https://github.com/qalle2/findstrings","last_synced_at":"2025-07-25T06:04:32.004Z","repository":{"id":171908762,"uuid":"550006950","full_name":"qalle2/findstrings","owner":"qalle2","description":"Find text strings in a binary file.","archived":false,"fork":false,"pushed_at":"2023-10-05T01:40:31.000Z","size":37,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-08T06:42:09.447Z","etag":null,"topics":["command-line","python3","rom-hacking"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qalle2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-12T04:08:24.000Z","updated_at":"2022-10-23T18:28:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"a4abdd1d-d8c4-4fa1-aaaa-3aa0a08c7f56","html_url":"https://github.com/qalle2/findstrings","commit_stats":null,"previous_names":["qalle2/findstrings"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/qalle2/findstrings","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qalle2%2Ffindstrings","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qalle2%2Ffindstrings/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qalle2%2Ffindstrings/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qalle2%2Ffindstrings/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qalle2","download_url":"https://codeload.github.com/qalle2/findstrings/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qalle2%2Ffindstrings/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266963279,"owners_count":24013020,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-25T02:00:09.625Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line","python3","rom-hacking"],"created_at":"2025-03-08T06:40:58.154Z","updated_at":"2025-07-25T06:04:31.956Z","avatar_url":"https://github.com/qalle2.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# findstrings\nFind text strings in a binary file and print them.\n\nTable of contents:\n* [Command line help text](#command-line-help-text)\n* [Output modes](#output-modes)\n* [Table files](#table-files)\n* [Examples](#examples)\n\n## Command line help text\n```\nusage: findstrings.py [-h] [-l MINIMUM_LENGTH] [-d MINIMUM_DISTINCT]\n                      [-r MAXIMUM_REPEAT] [-t TABLE_FILE] [-c]\n                      input_file\n\nFind text strings in a binary file and print them.\n\npositional arguments:\n  input_file            Binary file to read and find strings in.\n\noptions:\n  -h, --help            show this help message and exit\n  -l MINIMUM_LENGTH, --minimum-length MINIMUM_LENGTH\n                        Only print strings with at least this many bytes. 1 or\n                        greater, default=8.\n  -d MINIMUM_DISTINCT, --minimum-distinct MINIMUM_DISTINCT\n                        Only print strings with at least this many distinct\n                        bytes. 1 or greater, default=4.\n  -r MAXIMUM_REPEAT, --maximum-repeat MAXIMUM_REPEAT\n                        If the same byte repeats this many times, end the\n                        string (and possibly print it, based on -l \u0026 -d), then\n                        start a new string. 1 or greater, default=8.\n  -t TABLE_FILE, --table-file TABLE_FILE\n                        'Table file' to read (see README.md). Default=none.\n  -c, --csv             Output in CSV format (see README.md).\n```\n\n## Output modes\n* Default (non-CSV) mode: For each string, print the start and end address in\nhexadecimal and the string in `«»` quotes.\n* CSV mode (machine-readable): For each string, print the start address and\nlength in decimal and the string in `\"\"` quotes. The table file (see below)\nshould not contain the `\"` character.\n\n## Table files\nA *table file* is a UTF-8 text file that specifies how to convert bytes in the\nbinary file into printable characters.\n\nEach line consists of:\n* byte value to convert from (hexadecimal integer between `00` and `ff`)\n* one or more whitespace characters (space, tab, etc.)\n* character to convert into, in one of these formats:\n  * a single character (e.g. `å`)\n  * a hexadecimal Unicode codepoint between `00` and `10ffff` (single-digit\ncodepoints must have a leading zero)\n\nThese are ignored:\n* byte order mark (BOM, U+FEFF) at the start of the file (or any line, to be\nprecise)\n* leading and trailing whitespace\n* comment lines (lines starting with `#`)\n* empty lines.\n\nNote that whitespace characters must be written as codepoints, as otherwise\nthey'd be ignored as trailing whitespace. E.g. space can be written as `0020`\nand ideographic space as `3000`.\n\nAn example of a table file:\n```\n# byte 0xf0 becomes a space\nf0 0020\n# byte 0xf1 becomes \"å\"\nf1 å\n```\n\nIf no table file is specified, bytes `0x20`\u0026ndash;`0x7e` (printable ASCII) are\nconverted into their respective characters, and other bytes are ignored.\n\n## Examples\n```\n$ python3 findstrings.py doom.exe\n0x025c-0x0293: «DOS/4G  Copyright (C) Rational Systems, Inc. 1987 - 1993»\n0x0c7c-0x0c85: «DOS16M.386»\n0x0cb0-0x0cbf: «0123456789ABCDEF»\n(snip)\n```\n\n```\n$ python3 findstrings.py -c doom.exe\n604,56,\"DOS/4G  Copyright (C) Rational Systems, Inc. 1987 - 1993\"\n3196,10,\"DOS16M.386\"\n3248,16,\"0123456789ABCDEF\"\n(snip)\n```\n\n```\n$ python3 findstrings.py -t tables/nes-smb1.txt -l 9 -r 2 smb1.nes\n0x076c-0x0778: «BWORLD  TIMEW»\n0x0796-0x07a0: «WORLD  - YC»\n0x07c6-0x07ce: «GAME OVER»\n(snip)\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqalle2%2Ffindstrings","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqalle2%2Ffindstrings","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqalle2%2Ffindstrings/lists"}