Хочу поделиться своим максимально ненужным проектом на 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










