{"id":31079598,"url":"https://github.com/welchbj/dressing","last_synced_at":"2025-09-16T10:28:14.718Z","repository":{"id":50200475,"uuid":"159259371","full_name":"welchbj/dressing","owner":"welchbj","description":"cross-platform shared library function address resolution","archived":false,"fork":false,"pushed_at":"2022-12-08T01:19:15.000Z","size":59,"stargazers_count":2,"open_issues_count":4,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-30T16:48:04.016Z","etag":null,"topics":["address-resolution","shared-library","shellcoding"],"latest_commit_sha":null,"homepage":"","language":"Python","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/welchbj.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-11-27T01:48:59.000Z","updated_at":"2023-06-08T07:42:20.000Z","dependencies_parsed_at":"2023-01-25T02:45:24.963Z","dependency_job_id":null,"html_url":"https://github.com/welchbj/dressing","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/welchbj/dressing","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/welchbj%2Fdressing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/welchbj%2Fdressing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/welchbj%2Fdressing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/welchbj%2Fdressing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/welchbj","download_url":"https://codeload.github.com/welchbj/dressing/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/welchbj%2Fdressing/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275403962,"owners_count":25458816,"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-09-16T02:00:10.229Z","response_time":65,"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":["address-resolution","shared-library","shellcoding"],"created_at":"2025-09-16T10:28:09.946Z","updated_at":"2025-09-16T10:28:14.708Z","avatar_url":"https://github.com/welchbj.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg width=\"260\" height=\"589\" src=\"static/logo.png\" alt=\"dressing\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  :leaves: \u003cem\u003eaddress resolution for you and your friends\u003c/em\u003e :tomato:\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://pypi.org/project/dressing/\"\u003e\n    \u003cimg src=\"https://img.shields.io/pypi/v/dressing.svg?style=flat-square\u0026label=pypi\" alt=\"pypi\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://pypi.org/project/dressing/\"\u003e\n    \u003cimg src=\"https://img.shields.io/pypi/pyversions/dressing.svg?style=flat-square\" alt=\"pyversions\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://travis-ci.org/welchbj/dressing\"\u003e\n    \u003cimg src=\"https://img.shields.io/travis/welchbj/dressing/master.svg?style=flat-square\u0026label=linux%20build\" alt=\"Linux build on Travis CI\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://ci.appveyor.com/project/welchbj/dressing\"\u003e\n    \u003cimg src=\"https://img.shields.io/appveyor/ci/welchbj/dressing/master.svg?style=flat-square\u0026label=windows%20build\" alt=\"Windows build on Appveyor\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## Synopsis\n\n`dressing` is a simple cross-platform utility for resolving the addresses of functions from shared libraries, using `GetProcAddress` on Windows and `dlsym` on POSIX systems. Inspired by the `arwin` program originally authored by [Steve Hanna](http://vividmachines.com/about/).\n\n## License\n\nThis code is released under the [MIT License](https://opensource.org/licenses/MIT).\n\n## Installation\n\nDownload the latest packaged release from PyPI:\n```sh\npip install dressing\n```\n\nOr get the latest version from version control:\n```sh\npip install https://github.com/welchbj/dressing/archive/master.tar.gz\n```\n\n## Basic usage\n\nThe `dressing` command-line tool accepts two arguments: the name of the library in which you would like to search and the name of the function for which you would like to find the address.\n\nA complete shared library name does not need to be provided, as some searching will be performed based on OS semantics. Here's a quick example on a Windows box:\n```sh\n$ dressing kernel32 HeapCreate\n0x7ffa41b1d900\n```\n\nNote that the previous example is reporting the absolute address in memory of `HeapCreate`. If you wanted the offset to `HeapCreate` (using the base address of the loaded `kernel32.dll` module as our point of reference), you'd use:\n```sh\n$ dressing -o kernel32 HeapCreate\n0x1d900\n```\n\nTo see more details about the location of the shared library identified by `dressing`, use the `-v` option. The fully specified path is provided for Windows, as shown in the below example.\n```sh\n$ dressing -v kernel32.dll LoadLibraryA\nUsing library at C:\\windows\\system32\\kernel32.dll\n0x7ffa41b1e090\n```\n\nOn POSIX systems, the shared library name will be fully expanded. This is demonstrated in the below example:\n```sh\n$ dressing -v c printf\nUsing library at libc.so.6\n0x7f0c6fe3ced0\n```\n\n## Disclaimer\n\nIt should be noted that due to the shared library search semantics of `dlsym` (used under the hood for POSIX-based function lookups), the search space for a function name will include all loaded modules. This results in the following undesirable behavior, where we still receive addresses for functions that are not exported directly within the library we specify:\n```sh\n$ dressing dl printf\n0x7f4d00c59e80\n```\n\nAs such, make sure you know the \"owning\" module of the function which you're resolving.\n\n## Detailed options\n\nHere's what you should see when running `dressing --help`:\n```\nusage: dressing LIBRARY FUNCTION\n\n         8I\n         8I\n         8I                                           gg\n         8I                                           \"\"\n   ,gggg,8I   ,gggggg,   ,ggg,     ,g,       ,g,      gg    ,ggg,,ggg,     ,gggg,gg\n  dP\"  \"Y8I   dP\"\"\"\"8I  i8\" \"8i   ,8'8,     ,8'8,     88   ,8\" \"8P\" \"8,   dP\"  \"Y8I\n i8'    ,8I  ,8'    8I  I8, ,8I  ,8'  Yb   ,8'  Yb    88   I8   8I   8I  i8'    ,8I\n d8,   ,d8b,,dP     Y8, `YbadP' ,8'_   8) ,8'_   8) _,88,_,dP   8I   Yb,,d8,   ,d8I\n \"Y8888P\"`Y88P      `Y8888P\"Y888P' \"YY8P8PP' \"YY8P8P8P\"\"Y88P'   8I   `Y8P\"Y8888P\"888\n                                                                               ,d8I'\n                                                                             ,dP'8I\n                                                                            ,8\"  8I\n                                                                            I8   8I\n                                                                            `8, ,8I\n                                                                             `Y8P\"\n                    address resolution for you and your friends\n\npositional arguments:\n  LIBRARY        the library in which to search for the specified function\n  FUNCTION       the function whose address you want to resolve\n\noptional arguments:\n  -h, --help     show this help message and exit\n  -o, --offset   print the offset of the function within its loaded module\n  -v, --verbose  increase detail of output\n  --version      program version\n```\n\n\n## Special Thanks\n\nThis project would not have been possible without the help of my good friend, Jinny. Check out her [GitHub page](https://github.com/jinnyyan)!","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwelchbj%2Fdressing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwelchbj%2Fdressing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwelchbj%2Fdressing/lists"}