python - 사용 - 파이썬으로 어셈블러 코드 실행하기



레스 pointers (5)

파이썬 스크립트 안에 어셈블리 코드를 실행하고 싶습니다. 그게 가능하니?

C 프로그래밍에서는 다음과 같이됩니다.

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

하지만 파이썬으로 어떻게 할 수 있습니까? 가능한가?

https://ffff65535.com


necroposting 미안하지만, 당신은 자신의 DLL을 작성하여 asm을 사용하여 Python 내에서 함수라고 부를 수 있다고 생각합니다.


당신이 이것을 할 수있는 한가지 방법은 파이썬을위한 (C) 확장을 작성하는 것입니다. 이를 수행하는 방법에 대한 자세한 내용은 this 설명서를 참조하십시오.

C 기반 Python 확장을 개발하는 또 다른 방법은 ctypes 모듈을 사용하여 외부 라이브러리와 직접 인터페이스하는 것입니다.

어쨌든, 라이브러리 나 확장으로 컴파일 된 C 코드와 Python에서 호출하는 방법이 필요합니다. 분명히 이것을 달성하고자하는 것은 아마도 최적은 아니지만 사실 몇 가지 기능을 드러내는 데 그다지 효과적이지 않습니다.


이론 상으로는 다음과 같이 할 수 있습니다.

  1. 어셈블리를 호출하는 C 함수를 작성하십시오.
  2. Cython 또는 Pyrex 를 사용하여 Python에서 해당 함수를 호출하십시오.

파이렉스 (Pyrex) 나 싸이 튼 (Cython)을 사용하지 않았 음을 인정해야하지만, C 익스텐션을 작성하는 번거 로움을 겪지 않고도 필요한 것을 할 수 있습니다.


파이썬으로 작은 어셈블러를 만들 가능성이 높습니다. 제가 사용했던 라이브러리 중 일부는 Ctypes를 지원했을 수도 있지만, 순수 Python을 사용했습니다. 대부분의 언어는 실제로 낮은 수준에서 인터페이스를 수행합니다. 우리는 HLL Langage 기능을 사용하고 지불하지 않습니다. 코드가 어떻게 처리되는지에 대해 적절한주의를 기울여야하며 ASM x86 코드를 사용하는 시각적 기본으로 작은 POC 이미지 편집 응용 프로그램을 작성했습니다. 실제로이 말을 편집하려고하는 방법에 대해서는 확신 할 수 없습니다. asm 코드를 읽고 스크립트 자체에서 작업하는 기능은 예외입니다. 나는 내 생각이 잘못되었다고 생각합니다. ASM 코드는 코드의 해당 영역을 읽고 컴파일하는 스크립트 함수를 사용하여 실행할 수 있습니다. 거의 마치 파리 어셈블러에 내장 된 것처럼. 나는 이렇게 위대한 연설자 (또는이 경우에는 writter)를 도우려고 노력한다. 아마도이 페이지는 아마도 내가 말하려고하는 것에 대해 더 잘 설명 할 수있을 것이다 http://code.activestate.com/recipes/579037-how-to-execute-x86-64-bit-assembly-code-directly-f/


here 에서 사용할 수있는 CorePy 패키지를 사용할 수 here . 예를 들어 amd64에서 문서를 사용하려면 다음을 수행하십시오.

# Load the x86_64 instructions and environment
>>> import corepy.arch.x86_64.isa as x86
>>> import corepy.arch.x86_64.platform as x86_env
Platform: linux.spre_linux_x86_64_64

# Create a simple synthetic program
>>> code = x86_env.InstructionStream()
>>> code.add(x86.mov(code.gp_return, rsp))

# Execute the synthetic program 
>>> proc = x86_env.Processor()
>>> result = proc.execute(code, mode='int')
>>> print result
<rsp value will be here>




memory-address