繁体   English   中英

在 c 程序中静态分配一个 memory 地址

[英]Statically assign a memory address in c program

我正在构建非常小的测试程序,我想让程序每次都访问相同的 memory 地址(我知道这不是一个好习惯)来模拟一些行为。 我怎样才能选择一个 memory 地址在程序中进行硬编码并尝试一下? 有没有办法查看 memory 地址的未使用块并阻止它们?

我完全理解这可能会造成不必要的条件/情况。

您可以使用与号ampersand operator (&)将指针指向特定的 memory 地址。 但是,您的程序必须能够合法地访问该地址,该地址由您的操作系统分配给您的程序的地址范围决定,否则您将出现segmentation fault

示例代码:

void * p1 = (void *)0x28ff44;

或者,如果您希望它作为 char 指针:

char * p2 = (char *)0x28ff44;

附言

您可以找出分配给您的程序的地址,并将其中的一个地址放入您的程序中。 对于单次运行,您的程序将访问相同的 memory 位置,但对于另一次运行,分配给您的进程的位置将不同,但该运行的位置相同。

您可以参考此处查看如何读取分配给您的进程的 memory 地址。 您可以在运行时获取输入以提供您的process id以获取文件路径

解决方法

由于您提到它是small test program ,您还可以通过禁用ASLR测试您的程序来禁用randomization of memory addresses ,您只需使用 linux 禁用 ASLR

echo 0 > /proc/sys/kernel/randomize_va_space

然后运行你的程序,声明和初始化一个变量,打印它的地址,然后在你的程序中硬编码这个地址。 答对了。! 每次都将使用该地址,直到您再次启用 ASLR。

但是关闭 ASLR 并不安全,测试后您应该再次启用 ASLR

echo 1 > /proc/sys/kernel/randomize_va_space

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM