¡Hola!
Vaya por delante que soy nuevo en Python, que de ASM sé lo que haya podido aprender en las lecciones sobre OLLY de R.Narvaja y que también tengo que pensar bastante para saber en qué sección del Foro debo colocar las preguntas que se me ocurren.
Hace unos días en el Foro de Ingeniería inversa, en el titulado "[KeygenMe] Matrix <<1,2,3>> por mr.blood", presenté un keygen en Python. Funciona pero es muy lento porque tiene que hacer la comparación entre una ingente combinación de letras. En mi PC, si el nombre que introduzco no tiene clave posible, tarda casi 40 segundos. Pensé, si las comparaciones las pudiese hacer en ASM tardaría mucho menos.
Buscando por la red encontré un módulo pyasm.py en la página de un tal pyalot-pyasm que parece ser que permite injertar código ASM en Phyton. He tratado de hacer correr el "HOLA MUNDO" de ejemplo que hay en la página citada y me da un montón de errores.
Preguntas ¿Se puede injertar ASM en Python? ¿Acelera los módulos?¿Hay alguien que haya usado el pyasm y tenga algún ejemplo de uso?
Saludos.
¿Algo como esto no te funciona? http://codeflow.org/entries/2009/jul/31/pyasm-python-x86-assembler/ (http://codeflow.org/entries/2009/jul/31/pyasm-python-x86-assembler/)
An vez de mezclar ASM con Python, también puedes plantearte usar un lenguaje como C, de más bajo nivel.
me parece que al pasar siempre por el interprete asm perderá velocidad, ¿por qué no programar en asm directamente?
Cita de: tincopasan en 6 Abril 2015, 00:33 AM
me parece que al pasar siempre por el interprete asm perderá velocidad, ¿por qué no programar en asm directamente?
Supongo que lo que hace en Python es compilar el ASM y guardarlo como una función, que luego ejecuta directamente. Por tanto, sería eficiente. El problema de ASM directamente es que es más complejo.
Cita de: ivancea96 en 6 Abril 2015, 01:32 AM
Supongo que lo que hace en Python es compilar el ASM y guardarlo como una función, que luego ejecuta directamente. Por tanto, sería eficiente. El problema de ASM directamente es que es más complejo.
eso hay que revisarlo porque puede ser un simple interprete de asm
Cita de: engel lex en 6 Abril 2015, 02:08 AM
eso hay que revisarlo porque puede ser un simple interprete de asm
Puede, pero sería una librería bastante inútil :/
no sería inútil... sería practico para webs que quieren hacer asm de practica (al warzone de este foro) serviría para hacer debug, etc...
pero revisando el github de pyasm, creo qeu queda claro de que va
https://github.com/AmihaiN/pyAsm/blob/master/pyAsm.py (https://github.com/AmihaiN/pyAsm/blob/master/pyAsm.py)
¡Hola!
Ivancea96, efectivamente es ese 'Hello World' el que no consigo correrlo en Python. Tengo el python.exe de python y el setup.py del pyasm en dos carpetas separadas en el mismo directorio, y para correr y modificar los .py utilizo WING IDE. Pues con estas herramientas no he sabido dónde colocar ni cómo usar los comandos de instalación de pyasm que indican en la página que citas.
Me da la impresión de que he hecho unas preguntas de master cuando estoy en primaria, así que voy a seguir profundizando en ASM y Python por separado y me voy a dejar de fantasías que no entiendo por el momento.
De todas formas me gusta mucho leer vuestros comentarios magistrales, tanto de este como de otros asuntos, aunque no me entere de la misa la media.
Saludos
@ViejoMajara: PyAsm está usando nasm para compilar el codigo asm. Necesitas el nasm.exe para que el pyasm pueda compilar el codigo.
Lo tienes al ejecutable?
Saludos!
¡Hola!
Sí que tengo el nasm.exe pero no sé cómo hacer para que todo se ligue.
Explico lo que he hecho:
He guardado el Example(Hello World) como pythonASM_1.py y lo he abierto en Wing IDE. Observo que aquí hay un
fun() que debe ser
prog compilado.
Como veo que importa cosas de pyasm, pues he abierto también el pyasm.py.
He tratado de correr el pythonASM_1.py y me da una serie de errores.
Si ejecuto el nasm.exe, aparece fugazmente y desaparece.
Con esto que recomienda el autor de pyasm para instalarlo:
Citarcd pyasm; python setup.py install
easy_install pyasm
no sé ni dónde ni cómo ni qué hacer.
En resumidas cuentas, no tengo ni pajolera idea. >:D
Saludos.
¿Errores? ¿Qué errores?
¡Hola!
He colocado en Wing IDE el ejemplo siguiente con el nombre pythonASM_1.py.
from pyasm import Program
from pyasm.data import String
from pyasm.macro import syscall
from pyasm.instructions import mov, ret, push, add
from pyasm.registers import eax, ebx, ecx, edx, ebp
import sys
def example():
msg = 'Hello World!'
prog = Program(
mov(ebx, 1),
mov(ecx, String(msg)),
mov(edx, len(msg)),
syscall('write'),
ret(),
)
fun = prog.compile()
fun()
if __name__ == '__main__':
example()
He colocado a su lado en la cabecera de Wing IDE el setup.py para pyasm.
He corrido el pythonASM_1.py y en vez de aparecerme 'Hello World' me sale la ventana de excepciones con estos mensajes.
File "l:\Aprendiendo PYTHON\PythonASM\pythonASM_1.py", line 21, in <module>
example()
File "l:\Aprendiendo PYTHON\PythonASM\pythonASM_1.py", line 17, in example
fun = prog.compile()
File "E:\Python27\lib\site-packages\pyasm-0.1.0-py2.7.egg\pyasm\program.py", line 39, in compile
File "E:\Python27\lib\site-packages\pyasm-0.1.0-py2.7.egg\pyasm\program.py", line 72, in compile
File "E:\Python27\lib\site-packages\pyasm-0.1.0-py2.7.egg\pyasm\program.py", line 48, in __init__
File "E:\Python27\Lib\ctypes\__init__.py", line 378, in __getattr__
func = self.__getitem__(name)
File "E:\Python27\Lib\ctypes\__init__.py", line 383, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: function 'valloc' not found
Esos son lo que yo llamo errores.
Saludos