关于直接访问内存地址值

人傻且呆但不萌 2015-09-11 11:39:29
HI,各位,最近着手一个项目,需要从给定的地址中读取内存的值做后续的业务,我刚开始尝试C#,python都没有得到很理想的结果,我想做到如下的功能:






请问各位能有好的思路或者查考吗?

谢谢各位
...全文
583 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcb1995 2018-08-14
  • 打赏
  • 举报
回复
rw从给定的地址中读取内存的值,你用的winio库里的哪个函数啊
vcb1995 2018-08-14
  • 打赏
  • 举报
回复
引用 11 楼 zhao4zhong1 的回复:
https://www.baidu.com/s?wd=WinIO.sys%2064%E4%BD%8D&rsv_spt=1&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=0&rsv_t=1792P3lllds0nXKvBKyge625umfFkufwxZUgnvIfDofMukDFdTJBasHwLC0o5u0vklJp&oq=WinIO.sys%E6%9C%8964%E4%BD%8D%E7%89%88%E7%9A%84%E5%90%97%3F&rsv_pq=f0e5a027000054a2&rsv_sug3=4&inputT=23330&rsv_sug4=23330

PBYTE pbLinAddr;
HANDLE PhysicalMemoryHandle;
pbLinAddr = MapPhysToLin(0xA0000, 65536, &PhysicalMemoryHandle);
该函数将把物理地址范围为0xA0000 - 0xAFFFF的地址空间映射到与应用程序对应的线性地址空间。 返回值为一个与物理地址0xA0000相关的线性地址。如果出现错误,则返回值为NULL。
为什么上面列子MapPhysToLin第一个参数就报错了啊
  • 打赏
  • 举报
回复
感谢各位的回复,winio已经可以成功读取到物理地址的值了,稍后会更新上DEMO
fly_dragon_fly 2015-09-11
  • 打赏
  • 举报
回复
什么系统, 做什么用的
www_adintr_com 2015-09-11
  • 打赏
  • 举报
回复
你要读物理地址?
宋寒松 2015-09-11
  • 打赏
  • 举报
回复
嵌入汇编代码是比较本质的方法吧。
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
使用WinIO.sys?
谢谢赵老师提供的,我去看看文档先 :)
赵4老师 2015-09-11
  • 打赏
  • 举报
回复
使用WinIO.sys?
fly_dragon_fly 2015-09-11
  • 打赏
  • 举报
回复
引用 7 楼 nice_fish 的回复:
[quote=引用 5 楼 fly_dragon_fly 的回复:] 什么系统, 做什么用的
是这样的一个需求,比较预设的GPIO的值和实际值是否有出入 而GPIO的值是存在内存中的,所以需要从内存地址中读取相应的值出来然后做后续的比较[/quote]不太明白是什么地址, 那地址看起来是64位的, 如果是物理地址, 算起来有19G的,你内存有那么大吗
赵4老师 2015-09-11
  • 打赏
  • 举报
回复
WinIo.h:
#ifndef WINIO_H
#define WINIO_H

#ifdef WINIO_DLL
#define WINIO_API _declspec(dllexport)
#else
#define WINIO_API _declspec(dllimport)
#endif

extern "C"
{
  WINIO_API bool _stdcall InitializeWinIo();
  WINIO_API void _stdcall ShutdownWinIo();
  WINIO_API PBYTE _stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle);
  WINIO_API bool _stdcall UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr);
  WINIO_API bool _stdcall GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
  WINIO_API bool _stdcall SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);
  WINIO_API bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
  WINIO_API bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
  WINIO_API bool _stdcall InstallWinIoDriver(PSTR pszWinIoDriverPath, bool IsDemandLoaded = false);
  WINIO_API bool _stdcall RemoveWinIoDriver();
}

extern bool IsNT;
extern HANDLE hDriver;
extern bool IsWinIoInitialized;

bool _stdcall StartWinIoDriver();
bool _stdcall StopWinIoDriver();

#endif
  • 打赏
  • 举报
回复
引用 4 楼 adlay 的回复:
你要读物理地址?
我用的软件是:RwPortableX64V1.6.7 这个当前显示应该就是物理内存的实际值吧?
  • 打赏
  • 举报
回复
引用 5 楼 fly_dragon_fly 的回复:
什么系统, 做什么用的
是这样的一个需求,比较预设的GPIO的值和实际值是否有出入 而GPIO的值是存在内存中的,所以需要从内存地址中读取相应的值出来然后做后续的比较
holyjesus 2015-09-11
  • 打赏
  • 举报
回复
c语言和汇编都可以解决

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧