python内存地址示意图_如何从内存地址(python)获取数据

本文探讨了如何通过Python获取进程内存地址,包括使用psutil和ctypes库找到进程PID和基址,以及枚举模块的内存地址。尽管得到了137个模块地址,但作者寻求方法验证它们是否为动态内存地址,并询问如何读取这些地址中的可读数据。
摘要由CSDN通过智能技术生成

我不熟悉内存管理。

我要做的是读取内存地址中的数据。研究如何获取进程的内存地址和基址。在获取进程的piddef get_pid(process_name):

for proc in psutil.process_iter():

if process_name in str(proc.name):

print ("target: {}, pid: {}".format(process_name, proc.pid))

return proc.pid

查找进程的基地址process = ctypes.windll.kernel32.OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, False, pid)

modules = win32process.EnumProcessModules(process)

print(hex(modules))result:

0x140000000 0x7ff972560000 0x7ff96b650000 0x7ff971d90000

0x7ff96eb70000 0x7ff96cb60000 0x7ff950ee0000 0x7ff971e50000

0x7ff971fd0000 0x7ff970f30000 0x7ff9721f0000 0x7ff972500000

0x7ff96f0e0000 0x7ff96f040000 0x7ff96edf0000 0x7ff9718d0000

0x7ff96f020000 0x7ff9724d0000 0x7ff96cb30000 0x7ff96cad0000

0x7ff96e930000 0x7ff96efa0000 0x7ff9723a0000 0x7ff9715a0000

0x7ff9720e0000 0x7ff970ed0000 0x7ff96fa90000 0x7ff96f2e0000

0x7ff96e8f0000 0x7ff96e8d0000 0x7ff96e870000 0x7ff96e8c0000

0x7ff9713e0000 0x7ff971f00000 ...

在这一步,我会得到一个模块的列表,模块的len是137,我假设是动态内存地址,有没有办法证明是动态内存?在读取地址中的数据for module in modules:

print(hexlify(ctypes.string_at(id(addr), sys.getsizeof(addr))))result:

b'0100000000000000902c806c000000000b00000000000000ffffffffffffffffe4323038380000000000000000000000307831343030303030303000'

b'0100000000000000902c806c000000000e00000000000000ffffffffffffffffe4000000000000000000000000000000307837666639373235363030303000'

b'0100000000000000902c806c000000000e00000000000000ffffffffffffffffe4323038380000000000000000000000307837666639366236353030303000'

...

如何获得可读的数据?非常感谢。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值