【发布时间】:2013-08-20 00:53:09
【问题描述】:
- 平台:x86 Linux 3.2.0 (Debian 7.1)
- 编译器:GCC 4.7.2 (Debian 4.7.2-5)
我正在编写一个函数,该函数通过读取分配的内存部分以获取“随机”值来生成“随机”整数。这个想法是基于未初始化变量具有未定义值的事实。我最初的想法是使用 malloc() 分配一个数组,然后使用其未初始化的元素生成一个随机数。但是 malloc() 往往会返回 NULL 内存块,所以我不能保证有任何东西可以读取。所以我考虑读取一个单独的进程内存,以便几乎保证 NULL 以外的值。我目前的想法是以某种方式找到第一个有效的内存地址并从那里向下读取,但我不知道该怎么做。我尝试初始化一个指向 NULL 的指针,然后将其递增 1,但是如果我尝试打印引用的内存位置,则会发生分段错误。所以我的问题是如何读取单独的进程内存。除了读取它,我不需要对内存做任何事情。
【问题讨论】:
-
什么是“空内存块”?一个初始化为所有字节为零的?还是别的什么?
-
另外,如果你的进程读取他们进程的内存,人们会感到不安;您可能正在读取密码、信用卡号、社会保险号或操作系统应该对进程保密的各种其他内容。您必须是 root 才能读取任意其他用户的进程;如果你真的想要,你可以读取你自己进程的内存,但你真的不这样做,因为你不是在处理真正的随机值。
-
/dev/[u]random随机得多,问题也少得多。 -
读取未初始化的内存(作为对变量的概括)会引发未定义的行为。不要不要这样做!