There is a way to hook via gg
 
	 
 
	Here's an example you can modify based on your desired function 
 
function O_dinitial_search(class)
		gg.setRanges(gg.REGION_OTHER);
		gg.searchNumber(":" .. class, gg.TYPE_BYTE);
		count = gg.getResultsCount();
		if (count == 0) then
		else
			Refiner = gg.getResults(1);
			gg.refineNumber(Refiner[1].value, gg.TYPE_BYTE);
			count = gg.getResultsCount();
			val = gg.getResults(count);
			gg.addListItems(val);
		end
	end
	function CA_pointer_search()
		gg.clearResults();
		gg.setRanges(gg.REGION_C_ALLOC);
		gg.loadResults(gg.getListItems());
		gg.searchPointer(0);
		count = gg.getResultsCount();
		vel = gg.getResults(count);
		gg.clearList();
		gg.addListItems(vel);
	end
	function CA_apply_offset()
    tanker = 0xfffffffffffffff0
    local copy = false
    local l = gg.getListItems()
    if not copy then gg.removeListItems(l) end
    for i, v in ipairs(l) do
      v.address = v.address + tanker
      if copy then v.name = v.name..' #2' end
    end
    gg.addListItems(l)
	end
	function A_base_value()
		gg.setRanges(gg.REGION_ANONYMOUS);
		gg.loadResults(gg.getListItems());
		gg.clearList();
		gg.searchPointer(0);
		count = gg.getResultsCount();
		tel = gg.getResults(count);
		gg.addListItems(tel);
	end
	function A_base_accuracy()
	  gg.setRanges(gg.REGION_ANONYMOUS | gg.REGION_C_ALLOC)
		gg.loadResults(gg.getListItems());
		gg.clearList();
		gg.searchPointer(0);
		count = gg.getResultsCount();
		kol = gg.getResults(count);
		i = 1;
		h = {};
		while (i - 1) < count do
			h[i] = {};
			h[i].address = kol[i].value;
			h[i].flags = 32;
			i = i + 1;
		end
		gg.addListItems(h);
	end
	function A_user_given_offset(_offset, type)
		local _offset = load("return " .. _offset)();
		local old_save_list = gg.getListItems();
		for i, v in ipairs(old_save_list) do
			v.address = v.address + _offset;
			v.flags = type;
		end
		gg.clearResults();
		gg.loadResults(old_save_list);
	end
	function findClassPointer(class)
		gg.clearResults();
		gg.clearList();
		O_dinitial_search(class);
		CA_pointer_search();
		CA_apply_offset();
		A_base_value();
		A_base_accuracy();
	end
	function hackOffset(_offset, type, value)
		A_user_given_offset(_offset, type);
		gg.refineNumber("0~40", type);
		gg.getResults(99999999);
		gg.editAll(value, type);
	end
	 
 
	hooking with class pointer via game guardian.txt