Python 内嵌汇编模块(不是PyAsm纯API写的)
Python 内嵌汇编模块该模块使用外部库ctypes制作,2.7以上的Python官方版本现在都标配了这个库。本模块通过ctypes库调用WinAPi实现了在Python内嵌汇编。
由于是使用WinAPi实现的,所以只支持在Win系统下有效,其他系统不在支持行列。对其他系统比较了解的同学,希望大家一起完善。
附件中包含了一个汇编助手工具,用来将汇编源代码编译到字节码。模块实际大小仅仅只有几K。
**** Hidden Message *****
导出函数:
load() 初始化模块支持代码,不一定要初始化,调用相关支持命令时,该函数会自动执行。但是一定不要忘了结束时调用 free.
byteint 字节列表转到整数
create_memory 创建一段合法内存空间,返回指针。
free() 释放模块内所有支持的资源。结束时必须调用。
free_memory 释放内存。
get_codelp 将列表或元组中的字节码写到内存,并返回代码指针。
get_str_Pointer 取Python中字符串变量的指针。
move_memory 拷贝内存
read_byte 读内存字节
read_int 读内存整数
read_short 读内存短整数
run_code 执行内存代码
write_byte 写内存字节
write_int 写内存整数
write_short 写内存短整数
内嵌例子: run_code被执行后,它传入的参数默认放在了EBP指针处,通过mov eax, 可以获得这个参数。
代码做好了所有的收尾工作,在内嵌汇编时,只需要写自己的代码就行了。平栈工作不要忘了,需要自己平栈。
一个标准的C汇编代码:(N次加法运算)
import PyMemory as pm
lpcode=pm.get_codelp()#写汇编代码到内存
print(pm.run_code(lpcode,100000000))#执行代码,参数输入:1亿次累加
pm.free_memory(lpcode)#释放代码内存
pm.free()#释放代码
该例子汇编码为:
push ebp
mov ebp,esp
mov ecx,#从EBP处获取唯一一个可以传进来的参数。如果需要传多个参数,可以使用其他指针读写命令写到指针后传入,然后自己处理。
xor eax,eax
s:
add eax,1
loop s
mov esp,ebp
pop ebp
ret
对Python中字符串数据类型进行内存操作。建议通过写字节方式来写Python中的字符串,以免出现未知错误。
import PyMemory as pm
b="aaaaaaaaaaaaa"
lpstr=pm.get_str_Pointer(b)#取出变量的指针。
#将字节码转到整数写到字符串指针里去。
pm.write_int(lpstr,pm.byteint())
print(b)
pm.free()
学习学习。 这个正要用 学习一波 感谢分享 学习一下 想知道是什么
这个正要用
这个正要用 正好在学习 感谢分享 学习了 必须瞅瞅啊 {:5_101:} 看一看好不好用 为什么我在pip中install不了PyMemory 呢? 原来在附件里啊
感谢大佬的贡献 始化模块支持代码,不一定要初始化,调用相关支持命令时,该函数会自动执行。但是一定不要忘了结束时调用 这个强大呢 kan kan kan 厉害,膜拜学习一下 学习一下 感谢分享