C 将十六进制地址传递给指针变量

C 将十六进制地址传递给指针变量,c,pointers,C,Pointers,我知道如何使用指针。但我不知道该怎么做: 我有一个十六进制地址,当然它有一个来自任何应用程序的任意值 我知道如何找到我想要的地址。 我想写一个C代码将这个地址传递给指针变量,然后我可以从这个地址获取值,依此类推 例如: hex 0x00010010 int *pointer; 如何将此地址传递给指针,其语法是什么?在典型的现代操作系统中,您无法访问另一个进程(应用程序)的地址空间。地址是虚拟的,因此相同的数值对于不同的进程意味着不同的事情 如果您所在的系统具有真正的“平坦”地址空间(进程直接使

我知道如何使用指针。但我不知道该怎么做:

我有一个十六进制地址,当然它有一个来自任何应用程序的任意值

我知道如何找到我想要的地址。 我想写一个C代码将这个地址传递给指针变量,然后我可以从这个地址获取值,依此类推

例如:

hex 0x00010010
int *pointer;

如何将此地址传递给指针,其语法是什么?

在典型的现代操作系统中,您无法访问另一个进程(应用程序)的地址空间。地址是虚拟的,因此相同的数值对于不同的进程意味着不同的事情

如果您所在的系统具有真正的“平坦”地址空间(进程直接使用实际物理内存地址),例如680x0上的Amiga操作系统,您可以执行以下操作:

int *pointer = (int *) 0x00010010;

通过使用
int*
,您假设指向的数据是
int
(在大多数操作系统上为4字节)

我们不应该使用
void*
来代替吗?稍后,如果您想使用特定类型访问它的数据,您所需要做的就是强制转换

void *addr = (void*)0x0023FF74; // valid memory address within my app

printf("Address: %p\n", addr);
getchar();

printf("Data (4bytes): %d\n", *(int*)addr); // print the first 4 bytes of data as int
getchar();
编辑

请帮助我理解你想做什么,因为这句话让我感到困惑:

有一个应用程序使用该地址,我知道其中的值,但(int)指针不访问该值

您是否正在尝试编写一个应用程序来修改运行您的系统的另一个应用程序的内存?您当前的方法行不通,这就是为什么:当操作系统将您的应用程序加载到进程中时,它会保留一个内存区域供进程使用,并为该区域分配一系列虚拟地址。它们不会直接映射到RAM中的内存地址,因此操作系统必须为此保留一个内部表

在Windows上,加载的每个进程都接收相同范围的虚拟地址,但此区域仅对其内部运行的进程可见。例如,(在Windows上)进程加载在内存地址0x00400000中,这意味着每个进程都有自己的内存地址0x00400000,因此,您不能将X内存地址分配给应用程序中的指针,而希望Windows神奇地知道您正在引用另一个应用程序中的地址X


您试图实现的功能叫做win7,web上有很多关于它的信息。

事实上,我正在使用win7。我尝试了这段代码并测试了它的值,程序崩溃了。现在我改为void。他将十六进制地址传递给指针变量。第一张照片证实了这一点。他正确地显示了指针地址。问题是无法访问该值。有一个应用程序使用该地址,我知道其中的值,但(int)指针不访问该值。@Jacklyin更新我的答案。对我们很重要的一点是,你要审查所有的问题,并接受最能回答你问题的问题。在每个答案旁边都有一个小复选框,点击它可以选择你问题的正式答案。噢。。非常感谢你。我去谷歌搜索代码注入。我第一次来这里,很抱歉编辑错误。谢谢大家。再见