【发布时间】:2014-03-15 00:42:46
【问题描述】:
我对低级编程和 x86 架构有一个粗略的了解。据我了解,当前堆栈指针(英特尔机器上的SP、ESP 或RSP)处的值是不可预测的,因为它很可能在一秒钟内更改多次,我觉得它是一个更好的不可预测种子比当前系统时间(通常以秒为单位)。
例如:
.386
.MODEL FLAT, STDCALL
.DATA
fmt db "%d", 10, 0
.CODE
INCLUDELIB MSVCRT
EXTERN printf:PROC
EXTERN rand:PROC
EXTERN srand:PROC
_main PROC
push ebp
mov ebp, esp
push esp
call srand
add esp, 4
mov ecx, 10
l1:
push ecx
call rand
push eax
push offset fmt
call printf
add esp, 8
pop ecx
loop l1
mov esp, ebp
pop ebp
add esp, 4
jmp dword ptr [esp-4]
_main ENDP
END
即使同一程序在一秒钟内执行多次,该程序的输出也会有所不同。
但是,我认为,由于我很可能不是这个星球上第一个想到这个想法的人,如果我这样做有任何潜在的陷阱或灾难的风险这样 - 正如我之前所说,我现在才学习组装。
【问题讨论】:
标签: assembly random x86 cpu-registers