[英]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.