diff --git a/README.md b/README.md index c789ec5..e87b455 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,9 @@ [![Github Cpp CI Badge](https://github.com/emproof-com/nyxstone/actions/workflows/cpp.yml/badge.svg)](https://github.com/emproof-com/nyxstone/actions/workflows/cpp.yml) -Nyxstone is a assembler and disassembler library based on LLVM. Unlike other great frameworks like keystone and capstone, Nyxstone does not ship with any patches to LLVM. -Instead, Nyxstone interfaces with low-level LLVM 15 internals to assemble and disassemble by linking against standard LLVM libraries. +Nyxstone is an assembly and disassembly library based on LLVM. It doesn’t require patches to the LLVM source tree and links against standard LLVM libraries available in most Linux distributions. Implemented in C++, Nyxstone also offers Rust and Python bindings. It supports all official LLVM architectures and allows configuration of architecture-specific target settings. + +![Nyxstone Python binding demo](/images/demo.svg) ## Index diff --git a/images/demo.svg b/images/demo.svg new file mode 100644 index 0000000..841e246 --- /dev/null +++ b/images/demo.svg @@ -0,0 +1 @@ +nyxstone-demo:~$nyxstone-demo:~$pnyxstone-demo:~$pipnyxstone-demo:~$pipinstallnyxstone-demo:~$pipinstallnyxstonenyxstone-demo:~$pipinstallnyxstone-qnyxstone-demo:~$pythonnyxstone-demo:~$python-q>>>>>>from>>>fromnyxstone>>>fromnyxstoneimport>>>fromnyxstoneimportNyxstoneBuilder,>>>fromnyxstoneimportNyxstoneBuilder,LabelDefinition>>>n>>>ny>>>nyx>>>nyxs>>>nyxst>>>nyxsto>>>nyxston>>>nyxstone>>>nyxstone=>>>nyxstone=NyxstoneBuilder().with_triple("x86_64").build()>>>nyxstone.assemble_to_bytes("jne>>>nyxstone.assemble_to_bytes("jne.loop",>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(".loop",>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(".loop",0x1000)])[15,133,250,254,255,255]nyxstone-demo:~$pinyxstone-demo:~$pipinyxstone-demo:~$pipinnyxstone-demo:~$pipinsnyxstone-demo:~$pipinstnyxstone-demo:~$pipinstanyxstone-demo:~$pipinstalnyxstone-demo:~$pipinstallnnyxstone-demo:~$pipinstallnynyxstone-demo:~$pipinstallnyxnyxstone-demo:~$pipinstallnyxsnyxstone-demo:~$pipinstallnyxstnyxstone-demo:~$pipinstallnyxstonyxstone-demo:~$pipinstallnyxstonnyxstone-demo:~$pipinstallnyxstone-nyxstone-demo:~$pynyxstone-demo:~$pytnyxstone-demo:~$pythnyxstone-demo:~$pythonyxstone-demo:~$python->>>f>>>fr>>>fro>>>fromn>>>fromny>>>fromnyx>>>fromnyxs>>>fromnyxst>>>fromnyxsto>>>fromnyxston>>>fromnyxstonei>>>fromnyxstoneim>>>fromnyxstoneimp>>>fromnyxstoneimpo>>>fromnyxstoneimpor>>>fromnyxstoneimportN>>>fromnyxstoneimportNy>>>fromnyxstoneimportNyx>>>fromnyxstoneimportNyxs>>>fromnyxstoneimportNyxst>>>fromnyxstoneimportNyxsto>>>fromnyxstoneimportNyxston>>>fromnyxstoneimportNyxstone>>>fromnyxstoneimportNyxstoneB>>>fromnyxstoneimportNyxstoneBu>>>fromnyxstoneimportNyxstoneBui>>>fromnyxstoneimportNyxstoneBuil>>>fromnyxstoneimportNyxstoneBuild>>>fromnyxstoneimportNyxstoneBuilde>>>fromnyxstoneimportNyxstoneBuilder>>>fromnyxstoneimportNyxstoneBuilder,L>>>fromnyxstoneimportNyxstoneBuilder,La>>>fromnyxstoneimportNyxstoneBuilder,Lab>>>fromnyxstoneimportNyxstoneBuilder,Labe>>>fromnyxstoneimportNyxstoneBuilder,Label>>>fromnyxstoneimportNyxstoneBuilder,LabelD>>>fromnyxstoneimportNyxstoneBuilder,LabelDe>>>fromnyxstoneimportNyxstoneBuilder,LabelDef>>>fromnyxstoneimportNyxstoneBuilder,LabelDefi>>>fromnyxstoneimportNyxstoneBuilder,LabelDefin>>>fromnyxstoneimportNyxstoneBuilder,LabelDefini>>>fromnyxstoneimportNyxstoneBuilder,LabelDefinit>>>fromnyxstoneimportNyxstoneBuilder,LabelDefiniti>>>fromnyxstoneimportNyxstoneBuilder,LabelDefinitio>>>nyxstone=N>>>nyxstone=Ny>>>nyxstone=Nyx>>>nyxstone=Nyxs>>>nyxstone=Nyxst>>>nyxstone=Nyxsto>>>nyxstone=Nyxston>>>nyxstone=Nyxstone>>>nyxstone=NyxstoneB>>>nyxstone=NyxstoneBu>>>nyxstone=NyxstoneBui>>>nyxstone=NyxstoneBuil>>>nyxstone=NyxstoneBuild>>>nyxstone=NyxstoneBuilde>>>nyxstone=NyxstoneBuilder>>>nyxstone=NyxstoneBuilder(>>>nyxstone=NyxstoneBuilder()>>>nyxstone=NyxstoneBuilder().>>>nyxstone=NyxstoneBuilder().w>>>nyxstone=NyxstoneBuilder().wi>>>nyxstone=NyxstoneBuilder().wit>>>nyxstone=NyxstoneBuilder().with>>>nyxstone=NyxstoneBuilder().with_>>>nyxstone=NyxstoneBuilder().with_t>>>nyxstone=NyxstoneBuilder().with_tr>>>nyxstone=NyxstoneBuilder().with_tri>>>nyxstone=NyxstoneBuilder().with_trip>>>nyxstone=NyxstoneBuilder().with_tripl>>>nyxstone=NyxstoneBuilder().with_triple>>>nyxstone=NyxstoneBuilder().with_triple(>>>nyxstone=NyxstoneBuilder().with_triple(">>>nyxstone=NyxstoneBuilder().with_triple("x>>>nyxstone=NyxstoneBuilder().with_triple("x8>>>nyxstone=NyxstoneBuilder().with_triple("x86>>>nyxstone=NyxstoneBuilder().with_triple("x86_>>>nyxstone=NyxstoneBuilder().with_triple("x86_6>>>nyxstone=NyxstoneBuilder().with_triple("x86_64>>>nyxstone=NyxstoneBuilder().with_triple("x86_64">>>nyxstone=NyxstoneBuilder().with_triple("x86_64")>>>nyxstone=NyxstoneBuilder().with_triple("x86_64").>>>nyxstone=NyxstoneBuilder().with_triple("x86_64").b>>>nyxstone=NyxstoneBuilder().with_triple("x86_64").bu>>>nyxstone=NyxstoneBuilder().with_triple("x86_64").bui>>>nyxstone=NyxstoneBuilder().with_triple("x86_64").buil>>>nyxstone=NyxstoneBuilder().with_triple("x86_64").build>>>nyxstone=NyxstoneBuilder().with_triple("x86_64").build(>>>nyxstone.>>>nyxstone.a>>>nyxstone.as>>>nyxstone.ass>>>nyxstone.asse>>>nyxstone.assem>>>nyxstone.assemb>>>nyxstone.assembl>>>nyxstone.assemble>>>nyxstone.assemble_>>>nyxstone.assemble_t>>>nyxstone.assemble_to>>>nyxstone.assemble_to_>>>nyxstone.assemble_to_b>>>nyxstone.assemble_to_by>>>nyxstone.assemble_to_byt>>>nyxstone.assemble_to_byte>>>nyxstone.assemble_to_bytes>>>nyxstone.assemble_to_bytes(>>>nyxstone.assemble_to_bytes(">>>nyxstone.assemble_to_bytes("j>>>nyxstone.assemble_to_bytes("jn>>>nyxstone.assemble_to_bytes("jne.>>>nyxstone.assemble_to_bytes("jne.l>>>nyxstone.assemble_to_bytes("jne.lo>>>nyxstone.assemble_to_bytes("jne.loo>>>nyxstone.assemble_to_bytes("jne.loop>>>nyxstone.assemble_to_bytes("jne.loop">>>nyxstone.assemble_to_bytes("jne.loop",0>>>nyxstone.assemble_to_bytes("jne.loop",0x>>>nyxstone.assemble_to_bytes("jne.loop",0x1>>>nyxstone.assemble_to_bytes("jne.loop",0x11>>>nyxstone.assemble_to_bytes("jne.loop",0x110>>>nyxstone.assemble_to_bytes("jne.loop",0x1100>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[L>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[La>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[Lab>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[Labe>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[Label>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelD>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDe>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDef>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefi>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefin>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefini>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinit>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefiniti>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinitio>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(">>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(".>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(".l>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(".lo>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(".loo>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(".loop>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(".loop">>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(".loop",0>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(".loop",0x>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(".loop",0x1>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(".loop",0x10>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(".loop",0x100>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(".loop",0x1000>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(".loop",0x1000)>>>nyxstone.assemble_to_bytes("jne.loop",0x1100,[LabelDefinition(".loop",0x1000)] \ No newline at end of file