From d784d4bc40e2b0b0d91513a22a3c22f5e042d59c Mon Sep 17 00:00:00 2001 From: Warmist Date: Sat, 1 Sep 2012 10:05:31 +0300 Subject: [PATCH] Static code segment search for memscan.lua --- library/lua/memscan.lua | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/library/lua/memscan.lua b/library/lua/memscan.lua index 970f821c2..521f7c7e8 100644 --- a/library/lua/memscan.lua +++ b/library/lua/memscan.lua @@ -195,6 +195,36 @@ function MemoryArea:delete() for k,v in pairs(self) do self[k] = nil end end +-- Static code segment search +local function find_code_segment() + local code_start, code_end + + for i,mem in ipairs(dfhack.internal.getMemRanges()) do + if code_end then + if mem.start_addr == code_end and mem.read and not mem.write then + code_end = mem.end_addr + else + break + end + elseif mem.read and not mem.write + and (string.match(mem.name,'/dwarfort%.exe$') + or string.match(mem.name,'/Dwarf_Fortress$') + or string.match(mem.name,'Dwarf Fortress%.exe')) + then + code_start = mem.start_addr + code_end = mem.end_addr + end + end + + return code_start,code_end +end + +function get_code_segment() + local s, e = find_code_segment() + if s and e then + return ms.MemoryArea.new(s, e) + end +end -- Static data segment search local function find_data_segment()