A library for low-level abstract use to high-level.
Project description
🛠 pykasm
pykasm is a Python library for executing Assembly (ASM) code directly from Python scripts, allowing low-level integration with system calls and native libraries.
The goal is to provide a bridge between Python and Assembly, enabling developers to explore optimizations, manipulate memory, and execute machine instructions in a controlled manner.
📦 Installation
You can install via pip (after publication on PyPI):
pip install pykasm
💻 Examples
1️⃣ X86 Linux Example
##################################
# X86 Linux Example #
##################################
import pykasm
import ctypes
libc = ctypes.CDLL(None)
puts = libc.puts
puts.argtypes = [ctypes.c_char_p]
puts.restype = ctypes.c_int
msg_buf = ctypes.create_string_buffer(b"Hello, World")
msg_addr = ctypes.addressof(msg_buf)
puts_addr = ctypes.cast(puts, ctypes.c_void_p).value
asm_code = (
f"mov rdi, {msg_addr};\n"
f"mov rax, {puts_addr};\n"
"call rax;\n"
"ret"
)
pykasm.run_asm(asm_code)
2️⃣ X86 Windows Example
##################################
# X86 Windows Example #
##################################
import pykasm
import ctypes
msvcrt = ctypes.CDLL("msvcrt.dll")
puts = msvcrt.puts
puts.argtypes = [ctypes.c_char_p]
puts.restype = ctypes.c_int
kernel32 = ctypes.WinDLL("kernel32.dll")
ExitProcess = kernel32.ExitProcess
ExitProcess.argtypes = [ctypes.c_uint]
ExitProcess.restype = None
msg_buf = ctypes.create_string_buffer(b"Hello, World!\n")
msg_addr = ctypes.addressof(msg_buf)
puts_addr = ctypes.cast(puts, ctypes.c_void_p).value
exitprocess_addr = ctypes.cast(ExitProcess, ctypes.c_void_p).value
asm_code = (
f"mov rcx, {msg_addr}; "
f"mov rax, {puts_addr}; "
"call rax; "
"mov rcx, 0; "
f"mov rax, {exitprocess_addr}; "
"call rax; "
)
pykasm.run_asm(asm_code)
2️⃣ ARM64 Android Example
##################################
# ARM64 Android Example #
##################################
import pykasm
import ctypes
libc = ctypes.CDLL(None)
puts = libc.puts
puts.argtypes = [ctypes.c_char_p]
puts.restype = ctypes.c_int
_exit = libc.exit
_exit.argtypes = [ctypes.c_int]
_exit.restype = None
msg_buf = ctypes.create_string_buffer(b"Hello, World")
msg_addr = ctypes.addressof(msg_buf)
puts_addr = ctypes.cast(puts, ctypes.c_void_p).value
exit_addr = ctypes.cast(_exit, ctypes.c_void_p).value
def mov_imm64(reg, val):
parts = [
(val >> 0) & 0xFFFF,
(val >> 16) & 0xFFFF,
(val >> 32) & 0xFFFF,
(val >> 48) & 0xFFFF,
]
asm = []
asm.append(f'movz {reg}, #{parts[0]}')
if parts[1]: asm.append(f'movk {reg}, #{parts[1]}')
if parts[2]: asm.append(f'movk {reg}, #{parts[2]}')
if parts[3]: asm.append(f'movk {reg}, #{parts[3]}')
return "\n".join(asm)
asm_code = '\n'.join([
mov_imm64('x0', msg_addr),
mov_imm64('x16', puts_addr),
"blr x16",
"mov x0, #0",
mov_imm64('x16', exit_addr),
"blr x16",
"ret",
])
pykasm.run_asm(asm_code)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pykasm-0.1.1.tar.gz.
File metadata
- Download URL: pykasm-0.1.1.tar.gz
- Upload date:
- Size: 26.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
76590d5170629f393db9598b7a36edef0e5b28bfd193f2b2b8fb8f765c19e414
|
|
| MD5 |
9021ccfca618b52b46eafe92dfbeb5e1
|
|
| BLAKE2b-256 |
c935b455c9b302bd3feded48abf15bc0ec80d5e5a63007045a708b915146542b
|
File details
Details for the file pykasm-0.1.1-py3-none-any.whl.
File metadata
- Download URL: pykasm-0.1.1-py3-none-any.whl
- Upload date:
- Size: 26.7 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
95fafcc9d42b5e146ca5969c13814bc282a703d082631f6bc2fdac7088203726
|
|
| MD5 |
ff174cd7ef956e6c3cd6d4c71283850b
|
|
| BLAKE2b-256 |
80892a57b44c24a871b36792c622c0b7d4363f1ad3b9cbf838a796defdaee718
|