Comment faire pour que Python utilise Assembly

Je suis débutant en assemblage, mais maitre en Python. J’ai récemment commencé à apprendre le NASM x86_64 pour Windows et je souhaite combiner la puissance de l’assemblage et la flexibilité de Python. J’ai regardé partout et je n’ai pas trouvé de moyen d’utiliser une procédure d’assemblage NASM depuis Python. Par cela, je ne parle pas de assembly en ligne. Je souhaite écrire un programme d’assemblage, le comstackr, puis extraire en quelque sorte la procédure à utiliser dans mon programme Python. Quelqu’un peut-il illustrer un exemple simple de la façon de procéder, car je suis complètement perdu.

Vous pouvez créer un wrapper d’ extension C pour les fonctions implémentées dans l’assembly et le lier au fichier OBJ créé par nasm.

Un exemple factice (pour Python 2 32 bits; non testé):

myfunc.asm:

;http://www.nasm.us/doc/nasmdoc9.html global _myfunc section .text _myfunc: push ebp mov ebp,esp sub esp,0x40 ; 64 bytes of local stack space mov ebx,[ebp+8] ; first parameter to function ; some more code leave ret 

myext.c:

 #include  void myfunc(void); static PyObject* py_myfunc(PyObject* self, PyObject* args) { if (!PyArg_ParseTuple(args, "")) return NULL; myfunc(); Py_RETURN_NONE; } static PyMethodDef MyMethods[] = { {"myfunc", py_myfunc, METH_VARARGS, NULL}, {NULL, NULL, 0, NULL} }; PyMODINIT_FUNC initmyext(void) { (void) Py_InitModule("myext", MyMethods); } 

setup.py:

 from distutils.core import setup, Extension setup(name='myext', ext_modules=[ Extension('myext', ['myext.c'], extra_objects=['myfunc.obj'])]) 

Construire et exécuter:

nasm -fwin32 myfunc.asm

python setup.py build_ext --inplace

python -c"import myext;myext.myfunc()"

Vous pouvez également intégrer l’assemblage directement dans votre programme Python:

Celles-ci fonctionnent en compilant l’assemblage et en le chargeant dans la mémoire exécutable au moment de l’exécution. Les trois premiers projets implémentent des assembleurs x86 dans Python, alors que le dernier fait appel à un compilateur externe.

Pas sûr du “pouvoir” d’assemblage, vraiment.

Vous pouvez commencer ici: https://docs.python.org/2/extending/extending.html

Il s’agit d’étendre python avec du code compilé, écrit en C ou C ++, mais le principe devrait être le même (C n’est en réalité qu’un macro-assembleur portable).