风琪仙 发表于 2016-6-8 16:00:31

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()

天心不乱 发表于 2017-10-24 06:13:27

学习学习。

hapi525 发表于 2018-5-20 14:29:17

这个正要用

dasdsadasdsa 发表于 2018-6-17 12:20:42

学习一波

boom2y 发表于 2018-9-12 11:17:16

感谢分享 学习一下

soudoumei 发表于 2018-12-27 22:14:36

想知道是什么

myisfi 发表于 2019-1-6 08:52:28


这个正要用
这个正要用

veikai 发表于 2019-3-5 15:56:39

正好在学习 感谢分享

x575691755 发表于 2019-5-8 17:21:04

学习了

yuexing 发表于 2019-5-16 21:34:00

必须瞅瞅啊

叶子风 发表于 2019-7-5 21:16:31

{:5_101:}

jsdtxm 发表于 2019-7-8 22:48:16

看一看好不好用

一曲日月 发表于 2019-7-10 15:59:08

为什么我在pip中install不了PyMemory 呢?

一曲日月 发表于 2019-7-10 15:59:39

原来在附件里啊

zhuzhuxia666 发表于 2019-7-30 16:16:40

感谢大佬的贡献

qixiubanya 发表于 2019-9-3 11:28:55

始化模块支持代码,不一定要初始化,调用相关支持命令时,该函数会自动执行。但是一定不要忘了结束时调用 这个强大呢

yinhuxz 发表于 2019-9-27 15:44:19

kan kan kan

jiayuab 发表于 2019-10-6 11:17:01

厉害,膜拜学习一下

wave4y 发表于 2019-10-13 09:42:17

学习一下

zixing 发表于 2019-10-31 11:46:24

感谢分享
页: [1] 2 3 4
查看完整版本: Python 内嵌汇编模块(不是PyAsm纯API写的)