Хочу поделиться своим максимально ненужным проектом на Python, под названием flexpasm.

Это билдер кода для FASM под Linux. Работает ограниченно, но вроде-бы работает.
Проект, лично для меня, интересный.
Установить эту библиотеку можно через PyPi:
from flexpasm import ASMProgram
from flexpasm.constants import LinuxInterrupts
from flexpasm.instructions.registers import get_registers
from flexpasm.instructions.segments import Label
from flexpasm.mnemonics import IntMnemonic, MovMnemonic, XorMnemonic
from flexpasm.settings import Settings
def main():
settings = Settings(
title="Example ASM Program",
author="alexeev-prog",
filename="example.asm",
mode="64",
)
asmprogram = ASMProgram(settings, __name__)
regs = get_registers(settings.mode)
start_lbl = Label("start")
start_lbl.add_instruction(MovMnemonic(regs.AX, 4))
start_lbl.add_instruction(MovMnemonic(regs.CX, "message"))
start_lbl.add_instruction(MovMnemonic(regs.DX, "message_size"))
start_lbl.add_instruction(IntMnemonic(LinuxInterrupts.SYSCALL))
start_lbl.add_instruction(MovMnemonic(regs.AX, 1))
start_lbl.add_instruction(XorMnemonic(regs.BX, regs.BX))
start_lbl.add_instruction(IntMnemonic(LinuxInterrupts.SYSCALL))
asmprogram.add_label(start_lbl)
asmprogram.main_rws.add_string("message", "Hello, World!")
asmprogram.save_code()
# asmprogram.restore_backup()
if __name__ == "__main__":
main()
$ fasm example.asm example
$ ld example -o example
$ ./example
Hello, World!
А сам код генерируется такой:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Author: alexeev-prog ;;
;; Example ASM Program ;;
;; Program generated by FLEXPASM (github.com/alexeev-pro/flexpasm) ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
format ELF64 executable 3; ; ELF64 EXECUTABLE
entry start ; Set Start Entry
;; Segment readable executable in FASM is a directive for defining a section of code with readable and executable attributes.
segment readable executable
start: ; Label start with 7 commands
MOV RAX, 4 ; Loading 4 value into RAX register.
MOV RCX, message ; Loading message value into RCX register.
MOV RDX, message_size ; Loading message_size value into RDX register.
INT 128 ; Call software interrupt 128: SYSCALL
MOV RAX, 1 ; Loading 1 value into RAX register.
MOV RBX, RBX ; Exclusive OR operation RBX and RBX using XOR
INT 128 ; Call software interrupt 128: SYSCALL
;; Segment readable writeable in FASM is a definition of a segment of program data codes, where the attributes readable (the contents of the segment can be read) and writeable (program commands can both read codes and change their values) are specified for it.
segment readable writeable
message db 'Hello, World!', 0xA ; Var message (string)
message_size = $-message ; Var message (string) length
Я его написал довольно давно, вот решил поделиться. Может кому-то пригодится. Если есть баги - создавайте PR и Issue, буду рад)
github.com/alexeev-prog/flexpasm