我知道如何使用指针。 但我不知道这是怎么回事:
我有一个hex地址,当然它有任何应用程序的任何值。
我知道找到我想要的地址。 我想编写一个C代码将此地址传递给指针变量,然后我可以从该地址捕获值,依此类推。
例如:
hex 0x00010010 int *pointer;
如何将此地址传递给指针,这是什么语法?
通过使用int*
您假设您指向的数据是一个int
(4个字节,在大多数操作系统上)。
我们不应该使用void*
代替吗? 稍后,如果您想使用特定类型访问它的数据,您需要做的就是强制转换。
void *addr = (void*)0x0023FF74; // valid memory address within my app printf("Address: %pn", addr); getchar(); printf("Data (4bytes): %dn", *(int*)addr); // print the first 4 bytes of data as int getchar();
编辑 :
帮助我理解你想要做什么,因为这句话让我很困惑:
有app使用该地址,我知道它的值,但(int)指针不访问该值。
您是否正在尝试编写将修改运行系统的另一个应用程序的内存的应用程序? 您当前的方法将不起作用,这就是原因:当操作系统将您的应用程序加载到进程中时,它会保留一个内存区域供进程使用,并为该区域分配一系列虚拟地址。 这些虚拟地址不直接映射到RAM中的内存地址,因此操作系统必须为此保留内部表。
在Windows上,每个加载的进程都会收到相同范围的虚拟地址,但此区域仅对其中运行的进程可见。 例如,(在Windows上)进程被加载到内存地址0x00400000中,这意味着每个进程都有自己的内存地址0x00400000 ,因此您无法将X内存地址分配给应用程序中的指针,并期望Windows神奇地知道您正在努力解决另一个应用程序中的X问题。
您正在尝试实现它的所谓的代码注入 ,并且网上有很多关于它的信息。
在典型的现代操作系统中,您无法访问其他进程(应用程序)的地址空间。 地址是虚拟的 ,因此相同的数值意味着不同的过程不同。
如果您所在的系统具有真正的“扁平”地址空间(其中进程直接与实际物理内存地址一起使用),例如680×0上的Amiga OS,您可以执行以下操作:
int *pointer = (int *) 0x00010010;
以上就是c/c++开发分享将hex地址传递给指针变量相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/562503.html