local gg = gg -- 带符号偏移量转十六进制 function dz(i) return string.format("0x%X", i) end -- 优化后的B函数:修复end关键字语法错误,自动匹配SO库 function B(name, baseOffset, relativeOffset, val) -- 1. 获取搜索结果,无结果直接返回 local results = gg.getResults(gg.getResultsCount()) if #results == 0 then print(name .. ": 无有效搜索结果") return nil end -- 2. 计算基准地址 local baseAddress = results[1].address + baseOffset -- 3. 遍历内存区域,匹配baseAddress所属的SO库 local targetLib = nil local rangesList = gg.getRangesList() for _, v in ipairs(rangesList) do -- 核心修复:v["end"] 替代 v.end,避免关键字冲突 if baseAddress >= v.start and baseAddress <= v["end"] then targetLib = v break end end -- 4. 未匹配到SO库则返回nil if not targetLib then print(name .. ": 未找到基准地址所属的SO库") return nil end -- 5. 提取SO库名称(去掉路径)并计算最终偏移 local libName = targetLib.name:match("[^/]*$") local libStart = gg.getRangesList(libName)[1].start local finalAddress = baseAddress + relativeOffset - libStart local hexOffset = dz(finalAddress) --so=gg.getRangesList("libanogs.so")[1].start --py=0x229218 --setvalue(so+py,4,-698416192) -- 6. 输出格式化信息 print('so=gg.getRangesList("libanogs.so")[1].start') print('py='..hexOffset..'') print("setvalue(so+py,4,"..val..")") -- 7. 返回扩展信息和setvalue指令 return { hexOffset = hexOffset, libName = libName, libStart = libStart, calcCmd = string.format("so=gg.getRangesList('%s')[1].start\npy=%s\nsetvalue(so+py,4,VALUE)", libName, hexOffset) } end function A(searchValue, refineValue) gg.setRanges(gg.REGION_CODE_APP|gg.REGION_C_DATA) gg.clearResults() gg.searchNumber(searchValue, gg.TYPE_DWORD, false, gg.SIGN_EQUAL, 0, -1) if refineValue then gg.refineNumber(refineValue, gg.TYPE_DWORD) end end A("-1,191,150,977;-1,441,594,400;706,020,321:9", "706,020,321") B("MinRangeTarget", 0, 0x4, -721215457) A("943,723,528;-251,657,183;1,242,038,344;285,230,344:13", "943,723,528") B("MinRangeTarget", 0, -0x4, 335544329) A("-1,442,446,364;-1,442,380,827;-1,442,315,290;-1,442,249,753;1,384,120,648:21", "-1,442,249,753") B("MinRangeTarget", 0, 4, 1384120320) A("-702,611,200;-1,441,594,400;960,557,672:13", "-1,441,594,400") B("MinRangeTarget", 0, 0x4, 1384120320) A("-1,442,315,296;-1,441,594,400;-1,441,594,400;706,675,681:29", "1384120843") B("MinRangeTarget", 0, -0x18, -698416192) A("446,633,962;922,747,082;-113,244,184;-113,245,943;-113,243,863;-1,442,315,296:21", "-1,442,315,296") B("MinRangeTarget", 0, 0x4, -721215457) A("335,544,321;706,675,688;956,579,816;335,544,482:13", "335,544,321") B("MinRangeTarget", 0, -0x4, -721215457) A("960,495,624;960,495,657;1,795,752,200;1,409,286,337;-251,657,150;-1,862,269,952:21", "960,495,624") B("MinRangeTarget", 0, -0x4, 335544329)