用纯python实现的arm、x86、msp430、xtensa等的编译器
ppci的Python项目详细描述
ppci(pure python compiler infrastructure)项目是一个编译器 完全用python编写。它还包含语言前端 作为机器代码生成功能。有了这个图书馆你可以 生成(工作!)python中的机器代码!
该项目包含以下内容:
- 编译器、汇编程序、链接程序和生成系统
- 语言前端:brainfuck、c3、c、wasm
- 后端:6500,arm,avr,msp430,openrisc,risc-v,stm8,x86_64,xtensa
警告
此项目处于alpha状态,无法投入生产使用!
你可以在godbolt.org上试试ppci:https://godbolt.org/g/eooaPP
API
编译c3代码的api示例:
>>>importio>>>fromppci.apiimportc3c,link>>>source_file=io.StringIO(""" ... module main; ... function void print(string txt) { ... } ... function void main() { ... print("Hello world"); ... }""")>>>obj=c3c([source_file],[],'arm')>>>obj=link([obj])
如何组装一些程序集代码的示例:
>>>importio>>>fromppci.apiimportasm>>>source_file=io.StringIO("""section code ... pop rbx ... push r10 ... mov rdi, 42""")>>>obj=asm(source_file,'x86_64')>>>obj.get_section('code').databytearray(b'[ARH\xbf*\x00\x00\x00\x00\x00\x00\x00')
低级API使用示例:
>>>fromppci.arch.x86_64importinstructions,registers>>>i=instructions.Pop(registers.rbx)>>>i.encode()b'['