Skip to main content

Run machine code, assembly and webassembly directly in Python

Project description

pyas

Run machine code, assembly and webassembly directly in Python.

Have you ever realized you can't remember how to add numbers in Python but you do remember how to do it in assembly?

If the answer is yes this is the package for you, using pyas you will be able to run machine code, assembly and webassembly directly from within Python!

- currently this only supports Linux

Installation

From PyPI

pip3 install pyas

From GitHub

pip3 install git+https://github.com/donno2048/pyas

Usage / Example

Machine code

Comments are noted with ;, # and //

from pyas import function
add_one = function(
    '8b c7'  # mov eax, edi
    '83 c0 01'  # add eax, 1
    'c3'  # ret
)
return_same = function(
    '''
    8b c7  # mov eax, edi
    c3  // ret
    '''
)

print(add_one(10), "=", return_same(10), "+ 1")
# output: 11 = 10 + 1

add_numbers = lambda i, val: function(
    '''
    8b c7  ; mov eax, edi
    83 c0 %.2x # add eax, i
    c3  // ret
    '''
    %i,
    val # every value after the first argument will be passed directly to the function if supplied
)

print(add_numbers(4, 10), "=", "10 + 4")
# output: 14 = 10 + 4

Assembly

from pyas import function
add_one = function(
    '''
    mov eax, edi
    add eax, 1
    ret
    ''',
    raw = False
)
return_same = function(
    '''
    mov eax, edi
    ret
    ''',
    raw = False
)

print(add_one(10), "=", return_same(10), "+ 1")
# output: 11 = 10 + 1

add_numbers = lambda i, val: function(
    '''
    mov eax, edi
    add eax, %d
    ret
    '''
    %i,
    val, # every value after the first argument will be passed directly to the function if supplied
    raw = False
)

print(add_numbers(4, 10), "=", "10 + 4")
# output: 14 = 10 + 4

WebAssembly

pyas will automatically recognize running in a web browser and will run Webassembly, but you'll have to specify a func_name.

from pyas import function
add_one = function(
    '\0asm\1\0\0\0\1\6\1`\1'
    '\x7f\1\x7f\3\2\1\0\7'
    '\x0b\1\7add_one\0\0\n\t'
    '\1\7\0\x20\0A\x01j\x0b'
    , func_name = 'add_one')
print(f"{add_one(10)} = {add_one(9)} + 1")

View online

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

pyas-1.2.4.tar.gz (3.5 kB view details)

Uploaded Source

Built Distribution

pyas-1.2.4-py3-none-any.whl (3.7 kB view details)

Uploaded Python 3

File details

Details for the file pyas-1.2.4.tar.gz.

File metadata

  • Download URL: pyas-1.2.4.tar.gz
  • Upload date:
  • Size: 3.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.10.4

File hashes

Hashes for pyas-1.2.4.tar.gz
Algorithm Hash digest
SHA256 6201320b39f7327ff906f144167bfb9254268289f5cb165a7259ccb4cdad962a
MD5 96c0fc26a2190efc223745bc4cc5859a
BLAKE2b-256 8e5de4b5b40b3d49b2f3a4cf6e17413922e997727f5a0c0370cf5d4dfc52edf0

See more details on using hashes here.

File details

Details for the file pyas-1.2.4-py3-none-any.whl.

File metadata

  • Download URL: pyas-1.2.4-py3-none-any.whl
  • Upload date:
  • Size: 3.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.10.4

File hashes

Hashes for pyas-1.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 31bd3bde0b162566582ec7ef75f45d44a0c26160c1acaab8e79a72c36b6e20ab
MD5 bab06eff7f206ea5fb8331c3182aef17
BLAKE2b-256 e8a40852496ebf35912d4bfc13ff1883c7b8f9c22298c3a00985d076d680e4a8

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