108 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Lua
		
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Lua
		
	
offsets=offsets or {} 
 | 
						|
offsets._toff={}
 | 
						|
offsets._foff={}
 | 
						|
offsets.get = function (name)
 | 
						|
	if offsets._toff[name] == nil then
 | 
						|
		offsets.searchoffset(name,true)
 | 
						|
	end
 | 
						|
	return offsets._toff[name]
 | 
						|
end
 | 
						|
offsets.getEx = function (name) 
 | 
						|
	--return offsets._toff[name]+Process.getBase()
 | 
						|
	return offsets.get(name)+Process.getBase()
 | 
						|
end
 | 
						|
offsets.load = function ()
 | 
						|
	local f=io.open("dfusion/offsets.txt")
 | 
						|
	local line=f:read()
 | 
						|
	while line~=nil do
 | 
						|
		--print(line)
 | 
						|
		local sppliter=string.find(line,":")
 | 
						|
		offsets._toff[string.sub(line,1,sppliter-2)]=tonumber(string.sub(line,sppliter+2))
 | 
						|
		line=f:read()
 | 
						|
	end
 | 
						|
end
 | 
						|
offsets.save = function ()
 | 
						|
	local f=io.open("dfusion/offsets.txt","w")
 | 
						|
	for k,v in pairs(offsets._toff) do 
 | 
						|
		
 | 
						|
		f:write(string.format("%s : 0x%x\n",k,v))
 | 
						|
	end
 | 
						|
	f:close()
 | 
						|
end
 | 
						|
function offsets.new(name, func)
 | 
						|
	if type(func)=="function" then
 | 
						|
		table.insert(offsets._foff,{name,func,false})
 | 
						|
	else
 | 
						|
		offsets._toff[name]=func
 | 
						|
	end
 | 
						|
	--offsets._foff[name]={func,false}
 | 
						|
end
 | 
						|
function offsets.newlazy(name, func)
 | 
						|
	table.insert(offsets._foff,{name,func,true})
 | 
						|
	--offsets._foff[name]={func,true}
 | 
						|
end
 | 
						|
function offsets.searchoffset(num,forcelazy)
 | 
						|
	v=offsets._foff[num]
 | 
						|
	print("Finding offset:"..v[1])
 | 
						|
	if (v[3] and focelazy) or  not v[3] then
 | 
						|
		local pos=v[2]()
 | 
						|
		if pos== 0 then
 | 
						|
			error("Offset not found for:"..v[1])
 | 
						|
		else
 | 
						|
			offsets._toff[v[1]]=pos
 | 
						|
		end
 | 
						|
	end
 | 
						|
end
 | 
						|
function offsets.searchoffsets(forcelazy)
 | 
						|
	for k,v in pairs(offsets._foff) do
 | 
						|
		offsets.searchoffset(k,forcelazy)
 | 
						|
	end
 | 
						|
end
 | 
						|
function offsets.find(startoffset,...)
 | 
						|
	local endadr=GetTextRegion()["end"];
 | 
						|
	--[=[if startoffset== 0 then
 | 
						|
		local text=GetTextRegion()
 | 
						|
		--print("searching in:"..text.name)
 | 
						|
		startoffset=text.start
 | 
						|
		endadr=text["end"]
 | 
						|
	else
 | 
						|
		local reg=GetRegionIn(startoffset)
 | 
						|
		--print("searching in:"..reg.name)
 | 
						|
		if reg==nil then 
 | 
						|
			print(string.format("Warning: memory range for search @:%x not found!",startoffset))
 | 
						|
			return 0
 | 
						|
		end
 | 
						|
		endadr=reg["end"]
 | 
						|
	end--]=]
 | 
						|
	--print(string.format("Searching (%x->%x)",startoffset,endadr))
 | 
						|
	local h=hexsearch(startoffset,endadr,...)
 | 
						|
	local pos=h:find()
 | 
						|
	h=nil
 | 
						|
	return pos
 | 
						|
end
 | 
						|
function offsets.findall(startoffset,...)
 | 
						|
	local endadr;
 | 
						|
	if startoffset== 0 then
 | 
						|
		local text=GetTextRegion()
 | 
						|
		--print("searching in:"..text.name)
 | 
						|
		startoffset=text.start
 | 
						|
		endadr=text["end"]
 | 
						|
	else
 | 
						|
		local reg=GetRegionIn(startoffset)
 | 
						|
		--print("searching in:"..reg.name)
 | 
						|
		endadr=reg["end"]
 | 
						|
	end
 | 
						|
	local h=hexsearch(startoffset,endadr,...)
 | 
						|
	local pos=h:findall()
 | 
						|
	h=nil
 | 
						|
	return pos
 | 
						|
end
 | 
						|
function offsets.base()
 | 
						|
	return Process.getBase()
 | 
						|
end
 | 
						|
function offsets.getvectors()
 | 
						|
	return findVectors()
 | 
						|
end
 | 
						|
offsets.load()
 | 
						|
ADDRESS=ANYDWORD
 | 
						|
dofile("dfusion/offsets.lua") |