簡體   English   中英

如何讓Python使用Assembly

[英]How to get Python to use Assembly

我是匯編的初學者,但是Python的高手。 我剛剛開始學習Windows的x86_64 NASM,我希望結合匯編的強大功能和Python的靈活性。 我已經看了一遍,我還沒有找到一種方法在Python中使用NASM匯編程序。 通過這個我不是指在線組裝。 我希望編寫一個匯編程序,編譯它,然后以某種方式提取在我的Python程序中使用的過程。 有人能說明一個如何做到這一點的簡單例子,因為我完全迷失了。

您可以為程序集中實現的函數創建C擴展包裝器,並將其鏈接到nasm創建的OBJ文件。

一個虛擬示例(對於32位Python 2;未經測試):

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 <Python.h>

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'])])

構建並運行:

nasm -fwin32 myfunc.asm

python setup.py build_ext --inplace

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

您還可以直接在Python程序中嵌入程序集:

這些工作通過編譯程序集並在運行時將其加載到可執行內存中。 前三個項目用Python實現x86匯編程序,而最后一個調用外部編譯器。

真的,不確定裝配的“力量”。

您可以從這里開始: https//docs.python.org/2/extending/extending.html

它是關於使用C或C ++編寫的編譯代碼擴展python,但原理應該是相同的(C實際上只是一個可移植的宏匯編程序)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM