Skip to main content

Run exported symbols from native libraries

Project description

Integrity Action Status Publish Action Status MIT License Python Versions Package Version Code Style: Black

DyCall

Run exported symbols from native libraries

About

DyCall is a cross platform GUI application which lets you call exported functions from platform-native libraries.

"libraries" refers to dynamic libraries (a.k.a shared objects etc.).

Features

  • Follows platform-specific library search order.
  • Automatic export name demangling for native libraries.
  • Support for ordinal-only exports.
  • Support for out variables.
  • Find out export names for non-native libraries as well.
  • Standalone demangler for native ABI mangled names.
  • Light and dark themes.
  • Multi-lingual interface. Currently only Hindi and Marathi are supported.

Getting Started

DyCall requires Python 3.7+ with Tkinter installed.

Install via pip:

python -m pip install dycall

You can run it via:

python -m dycall-gui

You can also install shortcuts (Windows and Linux only):

python -m desktop-app install dycall

This will create shortcuts in Windows start menu or an equivalent place on Linux. You can then run DyCall like any other app, pin it, etc.

To uninstall, first remove any shortcuts if you installed them:

python -m desktop-app uninstall dycall

Then uninstall DyCall via pip:

python -m pip uninstall dycall

Usage

The interface has changed a bit since I recorded this GIF

FAQ

Is it non-blocking?

Yes! Function calls are executed on a separate thread. Although, you cannot close DyCall while a function is running. I don't think that's possible.

How do I pass nullptr or NULL as an argument?

Select Type as void

How do I pass Win32 data types?

Win32 data types are just typedefs to basic C data types.

Use this table below for finding out the correct type to use:

Win32 DyCall
PCSTR, LPCSTR char*
PWSTR, LPCWSTR wchar_t*
BYTE uint8_t
WORD uint16_t
DWORD uint32_t
HANDLE void*

How to pass out variables?

There are no special data types for out parameters, just pass them as normal types, the changed values will be reflected after execution finishes.

How to pass a buffer for an out string?

When using OUT Mode for strings, please ensure that none of the arguments are overwritten to a value whose size/length is greater than that before calling; i.e. input argument size must be equal to or greater than output argument size. If this is not the case, you can fill the out argument value with random data of length you know for sure is greater than what the out string will have. Since DyCall has no mechanism to preallocate string buffers, attempts to read beyond the NULL character will result in memory violation errors and crash DyCall.

I want to add/update a translation

Check the Adding Translations section in the contributor's guide.

Roadmap

  • Automatic call convention detection
  • Function prototype detection from header files or similar
  • Use a child process to execute, this ensures more stability

Contributing

Please check the contributor's guide.

You can contribute by adding translations, opening issues and filing pull requests. If that cannot be an option for you, you can directly drop an email. All contributions are welcome and acknowledged.

Contributors should also take a note of the Code of Conduct.

License

DyCall is distributed under the MIT License. See LICENSE for more information.

Contact

E-mail: demberto@protonmail.com

Acknowledgments

Additional acknowledgements have been made in the code.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dycall-0.0.3.tar.gz (344.1 kB view details)

Uploaded Source

Built Distribution

dycall-0.0.3-py3-none-any.whl (65.0 kB view details)

Uploaded Python 3

File details

Details for the file dycall-0.0.3.tar.gz.

File metadata

  • Download URL: dycall-0.0.3.tar.gz
  • Upload date:
  • Size: 344.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.11.2 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for dycall-0.0.3.tar.gz
Algorithm Hash digest
SHA256 331d3721cbb3d7d4e8d409b4d1b95318c92ec600b1966a8a690c3a65223e755f
MD5 0c29d543116eb3700ffab68615dacf87
BLAKE2b-256 a3a1f1caada85366087c3839f3204b67095174234b3f84edba92708fe853f133

See more details on using hashes here.

File details

Details for the file dycall-0.0.3-py3-none-any.whl.

File metadata

  • Download URL: dycall-0.0.3-py3-none-any.whl
  • Upload date:
  • Size: 65.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.11.2 pkginfo/1.7.1 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for dycall-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c9be1faa55e80f042fd5cc203af2341402f15be83b345ff747f9e79d89007889
MD5 78af431fa4f01b2aba96145dc192c168
BLAKE2b-256 ed5f44e9375f88f2e779906114c5c8b0c345b6be03f9e37288cd55dbe9af7996

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page