Выполнение ассемблерного кода с помощью Python - PullRequest
16 голосов
/ 18 мая 2011

Я хочу выполнить ассемблерный код внутри скрипта Python.Возможно ли это?

В программировании на С было бы так

static inline getesp(){
        __asm__("mov %esp, %eax");
}

Но как это сделать с Python?Возможно ли это?

Ответы [ 6 ]

13 голосов
/ 18 мая 2011

Один из способов сделать это - написать расширение (C) для Python. Вы можете взглянуть на эту документацию для получения полной информации о том, как это сделать.

Другим способом разработки расширений Python на основе C является непосредственное взаимодействие с внешней библиотекой с использованием модуля ctypes .

В любом случае вам понадобится код на С, скомпилированный в библиотеку или расширение, и способ вызова из Python. Очевидно, что то, чего вы хотите достичь, вероятно, не оптимально, но на самом деле не так много работы, чтобы раскрыть несколько функций.

11 голосов
/ 19 марта 2015

Вы можете встроить сборку прямо в вашу программу Python:

Они работают путем компиляции сборки и загрузки ее в исполняемую память во время выполнения.Первые три проекта реализуют ассемблеры x86-64 или x86 в Python, тогда как последний вызывает внешний компилятор.

5 голосов
/ 22 января 2013

Извините за некропостинг, но я думаю, что вы можете написать свою собственную DLL с помощью asm и вызывать ее функции из Python.

0 голосов
/ 07 сентября 2016

Вполне возможно, что я сделал небольшой ассемблер на python, некоторые из используемых мной библиотек могли поддерживать Ctypes, но я использовал чистый Python, большинство языков на самом деле взаимодействуют на низком уровне, мы просто используем функции HLL Langageи не обращая должного внимания на то, как обрабатывается код, я также написал небольшое приложение для редактирования изображений POC на Visual Basic, в котором использовался код ASM x86. На самом деле я не уверен, как отредактировать это в том, что я пытался сказать.за исключением, может быть, функций, которые читают код asm и работают из самого скрипта.Я верю, что мои мысли были указаны неправильно.Код ASM может быть выполнен с помощью скриптовых функций, которые читают эту область кода и компилируют их.почти как если бы это был встроенный на лету ассемблер.Я пытаюсь помочь не так великому оратору (хотя в данном случае это может быть и писатель), эта страница может объяснить лучше то, что я пытаюсь сказать http://code.activestate.com/recipes/579037-how-to-execute-x86-64-bit-assembly-code-directly-f/

0 голосов
/ 18 мая 2011

Теоретически вы можете:

  1. Написать простую функцию на C, которая вызывает сборку
  2. Использовать Cython или Pyrex чтобы вызвать эту функцию из Python

Я должен признать, что я не использовал ни Pyrex, ни Cython, но они могли бы делать то, что вам нужно, без необходимости писатьПолное расширение C.

0 голосов
/ 18 мая 2011

Python не поддерживает этот тип аппаратного взаимодействия низкого уровня.

...