54 lines
1.2 KiB
Lua
54 lines
1.2 KiB
Lua
seeds={}
|
|
add(modules,seeds)
|
|
function seeds:init()
|
|
self.l4=seed_pool:new(seed_constants.l4_start,seed_constants.l4_end,_naive_16b,true)
|
|
self.l5=seed_pool:new(seed_constants.l5_start,seed_constants.l5_end,_delta_4b,true)
|
|
self.ff=seed_pool:new(seed_constants.ff_start,seed_constants.ff_end,_delta_4b)
|
|
end
|
|
function seeds:choose(pool)
|
|
if (pool) return self[pool]:choose()
|
|
return rnd(5000>>16)
|
|
end
|
|
|
|
seed_pool=klass()
|
|
function seed_pool:init(addr_start,addr_end,routine,negencode)
|
|
if (negencode) self.neg_max=(%addr_start)>>16 addr_start+=2
|
|
local seeds={}
|
|
routine(seeds,addr_start,addr_end)
|
|
|
|
self.seeds=seeds
|
|
self.is_seed={}
|
|
for s in all(seeds) do
|
|
self.is_seed[s] = true
|
|
end
|
|
end
|
|
|
|
function seed_pool:choose()
|
|
if self.neg_max then
|
|
while true do
|
|
local r = rnd(self.neg_max)
|
|
if (not self.is_seed[r]) return r
|
|
end
|
|
end
|
|
|
|
return rnd(self.seeds)
|
|
end
|
|
|
|
function _delta_4b(seeds,s,e)
|
|
local acc=0
|
|
while s < e do
|
|
local byte=@s
|
|
local nb0=byte>>20
|
|
local nb1=(byte&0xf)>>16
|
|
if nb0==0 then acc+=0x0.000f else acc+=nb0 add(seeds,acc) end
|
|
if nb1==0 then acc+=0x0.000f else acc+=nb1 add(seeds,acc) end
|
|
s+=1
|
|
end
|
|
end
|
|
|
|
function _naive_16b(seeds,s,e)
|
|
while s < e do
|
|
add(seeds,%s)
|
|
s+=2
|
|
end
|
|
end |