鱼C论坛

 找回密码
 立即注册
查看: 15739|回复: 64

[作品展示] Python 内嵌汇编模块(不是PyAsm纯API写的)

[复制链接]
发表于 2016-6-8 16:00:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Python 内嵌汇编模块

该模块使用外部库ctypes制作,2.7以上的Python官方版本现在都标配了这个库。本模块通过ctypes库调用WinAPi实现了在Python内嵌汇编。
由于是使用WinAPi实现的,所以只支持在Win系统下有效,其他系统不在支持行列。对其他系统比较了解的同学,希望大家一起完善。


附件中包含了一个汇编助手工具,用来将汇编源代码编译到字节码。模块实际大小仅仅只有几K。
游客,如果您要查看本帖隐藏内容请回复




导出函数:
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,[ebp] 可以获得这个参数。
代码做好了所有的收尾工作,在内嵌汇编时,只需要写自己的代码就行了。平栈工作不要忘了,需要自己平栈。

一个标准的C汇编代码:(N次加法运算)
import PyMemory as pm
lpcode=pm.get_codelp([85,139,236,139,77,0,51,192,131,192,1,226,251,139,229,93,195])#写汇编代码到内存
print(pm.run_code(lpcode,100000000))#执行代码,参数输入:1亿次累加
pm.free_memory(lpcode)#释放代码内存
pm.free()#释放代码

该例子汇编码为:
push ebp
mov ebp,esp
mov ecx,[ebp]#从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([69,0,70,0]))
print(b)
pm.free()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-24 06:13:27 | 显示全部楼层
学习学习。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-20 14:29:17 | 显示全部楼层
这个正要用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-17 12:20:42 | 显示全部楼层
学习一波
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-12 11:17:16 | 显示全部楼层
感谢分享 学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-27 22:14:36 | 显示全部楼层
想知道是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-6 08:52:28 | 显示全部楼层

这个正要用
这个正要用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-5 15:56:39 | 显示全部楼层
正好在学习 感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-8 17:21:04 | 显示全部楼层
学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-16 21:34:00 | 显示全部楼层
必须瞅瞅啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-5 21:16:31 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-8 22:48:16 | 显示全部楼层
看一看好不好用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-10 15:59:08 | 显示全部楼层
为什么我在pip中install不了PyMemory 呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-10 15:59:39 | 显示全部楼层
原来在附件里啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-30 16:16:40 | 显示全部楼层
感谢大佬的贡献
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-3 11:28:55 | 显示全部楼层
始化模块支持代码,不一定要初始化,调用相关支持命令时,该函数会自动执行。但是一定不要忘了结束时调用 这个强大呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-27 15:44:19 | 显示全部楼层
kan kan kan
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-6 11:17:01 | 显示全部楼层
厉害,膜拜学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-13 09:42:17 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-31 11:46:24 | 显示全部楼层
感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 22:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表