【发布时间】:2014-06-14 17:07:46
【问题描述】:
我正在尝试打开/dev/random,从中读取一个字节并以状态退出...在 x86 程序集中。
这似乎返回随机数,但我不确定它是否符合我的想法。
# Where do we get our random numbers from
.data
random: .ascii "/dev/random\0"
# Program goes here
.text
.global _start
_start:
# Get /dev/random fd
movl $5, %eax # sys_open (originally $0 by accident)
movl $random, %ebx # Filename string
movl $0, %ecx # O_RDONLY flag
int $0x80
# Read one byte onto stack
movl %eax, %ebx # The result of sys_open
movl $3, %eax # sys_read
subl $1, %esp # Make stack space
movl %esp, %ecx # Make stack our buffer
movl $1, %edx # size_t bytes? only 1
int $0x80
# Exit with a random result
movl %esp, %ebx # random result as exit status
movl $1, %eax # sys_exit
int $0x80
当我通过strace 运行它时,我得到以下信息:
execve("./random", ["./random"], [/* 44 vars */]) = 0
fstat(0, NULL) = 3
close(0) = -1 EFAULT (Bad address)
write(0, NULL, 1 <unfinished ...>
+++ exited with 12 +++
注意缺少open() 和read()!还有,exit()去哪儿了?
我做错了什么?
【问题讨论】:
-
您的问题似乎更多是关于“如何从 /dev/random 读取”而不是关于“获取随机数”。请更改标题,以免误导未来的读者。 [如果你的目的是快速获得一个随机数,这可能不是这样做的方法。]
-
好的。更改为“在程序集中从 /dev/random 返回一个字节”