{"id":17158624,"url":"https://github.com/ethteck/coddog","last_synced_at":"2026-04-02T15:56:57.123Z","repository":{"id":215705896,"uuid":"739295779","full_name":"ethteck/coddog","owner":"ethteck","description":"Identify duplicate functions and portions of functions among one or more binaries","archived":false,"fork":false,"pushed_at":"2025-02-07T17:30:10.000Z","size":76,"stargazers_count":12,"open_issues_count":5,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-27T04:41:27.794Z","etag":null,"topics":["binary-analysis","code-analysis","decompilation","reverse-engineeering"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ethteck.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":"2024-01-05T08:18:47.000Z","updated_at":"2025-03-19T15:08:54.000Z","dependencies_parsed_at":"2024-08-23T08:57:33.322Z","dependency_job_id":null,"html_url":"https://github.com/ethteck/coddog","commit_stats":null,"previous_names":["ethteck/coddog"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethteck%2Fcoddog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethteck%2Fcoddog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethteck%2Fcoddog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethteck%2Fcoddog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ethteck","download_url":"https://codeload.github.com/ethteck/coddog/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248724080,"owners_count":21151555,"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","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":["binary-analysis","code-analysis","decompilation","reverse-engineeering"],"created_at":"2024-10-14T22:12:09.950Z","updated_at":"2026-04-02T15:56:57.117Z","avatar_url":"https://github.com/ethteck.png","language":"Rust","readme":"\u003cimg src=\"https://github.com/user-attachments/assets/1e20e404-6d03-4b4c-945a-bc2e0309969b\" width=400 /\u003e\n\n# coddog - the dog that sniffs for cod\n\ncoddog allows you to more efficiently decompile binaries by reducing redundant work. Whether it's identifying library functions, de-duplicating code, or looking for ways to get the codegen you want for that one portion of a function, coddog will find your cod!\n\n## Features\n\n### **match**: Function matching\n\nFind functions that are similar to a query function\n\n```\n~/repos/pokemonsnap$ coddog match func_80348C08_828378 -t 0.7\n100.00% - func_802ECC44_5E9D14 (decompiled)\n100.00% - func_802E01F4_6C7FD4 (decompiled)\n100.00% - func_802C57A4_647C54 (decompiled)\n73.33% - finishLevel (decompiled)\n73.10% - func_802D9DD8_6C1BB8\n71.88% - osAiSetFrequency (decompiled)\n70.89% - func_800E1930_A08EC0 (decompiled)\n70.19% - func_802D0D0C_7AA29C\n```\n\n### **cluster**: Function clustering\n\nFind clusters of functions that are identical or near-identical in one binary. This can be useful for de-duplicating redundant code and turning common functions into #includes.\n\n```\n~/repos/pokemonsnap$ coddog cluster -m 10\nCluster func_802C8998_7A1F28 has 23 symbols\nCluster func_802E1110_6C8EF0 has 12 symbols\nCluster func_802C2D00_6451B0 has 12 symbols\nCluster func_802CA858_7A3DE8 has 10 symbols\nCluster func_beach_802C68D8 has 8 symbols\n```\n\n### **submatch**: Partial function matching\n\nFind n-length segments of code that are common between the ones found in the given query function and all other functions in a binary (and soon, beyond)\n\n```\n~/repos/pokemonsnap$ coddog submatch finishLevel 30\nfunc_credits_801DE060 (decompiled):\n        query [41-77] matches func_credits_801DE060 [insn 101-137] (36 total)\nfunc_800A081C:\n        query [42-76] matches func_800A081C [insn 165-199] (34 total)\nfunc_8035464C_4F4A5C (decompiled):\n        query [43-77] matches func_8035464C_4F4A5C [insn 81-115] (34 total)\nupdateIdle (decompiled):\n        query [23-89] matches updateIdle [insn 107-173] (66 total)\n```\n\n## Experimental features\n\n### **compare2**: Find common functions between one binary and another\n\n```\n~/repos/pokemonsnap$ coddog compare2 decomp.yaml us ~/repos/stadium/decomp.yaml us\nalMainBusPull (decompiled) - alMainBusPull (decompiled) (98.61%)\n__ll_div (decompiled) - __ll_div (decompiled) (100.00%)\n__osIdCheckSum (decompiled) - __osIdCheckSum (decompiled) (100.00%)\n__ull_to_d (decompiled) - __ull_to_d (decompiled) (100.00%)\n__osSumcalc (decompiled) - __osSumcalc (decompiled) (100.00%)\n__ll_lshift (decompiled) - __ll_lshift (decompiled) (100.00%)\nVec3fDiff (decompiled) - func_8000E958 (100.00%)\n```\n\n### **compare-n**: Find common functions between one binary and multiple others\n```\n~/repos/pokemonsnap$ coddog compare-n decomp.yaml us /home/ethteck/repos/papermario/decomp.yaml\nComparing Pokemon Snap US to Paper Mario US:\nfunc_80369F80_83D730 (decompiled) - npc_set_palswap_2 (decompiled) (90.91%)\nalFxParam (decompiled) - au_SEFCmd_06_FineTune (decompiled) (91.67%)\nalLink (decompiled) - alLink (decompiled) (93.33%)\nalUnlink (decompiled) - alUnlink (decompiled) (90.91%)\nfunc_800C1E04_5ECA4 - osFlashWriteBuffer (decompiled) (92.00%)\n\nComparing Pokemon Snap US to Paper Mario PAL:\nNo matches found\n\nComparing Pokemon Snap US to Paper Mario iQue:\nfunc_80369F80_83D730 (decompiled) - npc_set_palswap_2 (decompiled) (90.91%)\nalFxParam (decompiled) - au_SEFCmd_06_FineTune (decompiled) (91.67%)\nalLink (decompiled) - alLink (decompiled) (93.33%)\nalUnlink (decompiled) - alUnlink (decompiled) (90.91%)\n\nComparing Pokemon Snap US to Paper Mario JP:\nfunc_80369F80_83D730 (decompiled) - npc_set_palswap_2 (decompiled) (90.91%)\nalFxParam (decompiled) - au_SEFCmd_06_FineTune (decompiled) (91.67%)\nalLink (decompiled) - alLink (decompiled) (93.33%)\nalUnlink (decompiled) - alUnlink (decompiled) (90.91%)\nfunc_800C1E04_5ECA4 - osFlashWriteBuffer (decompiled) (92.00%)\n```\n\n### Configuration\ncoddog reads [decomp.yaml](https://github.com/ethteck/decomp_settings) files to understand the attributes of a project.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethteck%2Fcoddog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fethteck%2Fcoddog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethteck%2Fcoddog/lists"}