diff options
author | bloodstalker <thabogre@gmail.com> | 2018-02-01 09:41:13 +0000 |
---|---|---|
committer | bloodstalker <thabogre@gmail.com> | 2018-02-01 09:41:13 +0000 |
commit | bb36d843120d0f30c8930c0cf430e265b0374f25 (patch) | |
tree | 6e8b1e3406472c06c4d10ee9e79502fcb864d3b5 /bruiser/lua-scripts/xobj.lua | |
parent | fixed string type for xobjs, also xcall can now call functions by name as well (diff) | |
download | mutator-bb36d843120d0f30c8930c0cf430e265b0374f25.tar.gz mutator-bb36d843120d0f30c8930c0cf430e265b0374f25.zip |
update
Diffstat (limited to '')
-rw-r--r-- | bruiser/lua-scripts/xobj.lua | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/bruiser/lua-scripts/xobj.lua b/bruiser/lua-scripts/xobj.lua new file mode 100644 index 0000000..b69f0e5 --- /dev/null +++ b/bruiser/lua-scripts/xobj.lua @@ -0,0 +1,127 @@ +------------------------------------------------Project Mutator----------------------------------------------- +--Copyright (C) 2018 Farzad Sadeghi + +--This program is free software; you can redistribute it and/or +--modify it under the terms of the GNU General Public License +--as published by the Free Software Foundation; either version 2 +--of the License, or (at your option) any later version. + +--This program is distributed in the hope that it will be useful, +--but WITHOUT ANY WARRANTY; without even the implied warranty of +--MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +--GNU General Public License for more details. + +--You should have received a copy of the GNU General Public License +--along with this program; if not, write to the Free Software +--Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.*/ +-------------------------------------------------------------------------------------------------------------- +function getSO(so_path) + elf_file = so_path +end + +function getGlobalTable() + local return_table = {} + local names = objload("elf_get_obj_names", elf_file, "symbol_list") + local sizes = objload("elf_get_obj_sizes", elf_file, "symbol_list") + for i=1,#names,1 do + return_table[names[i]] = sizes[i] + end + return return_table +end + +function printObjNames() + local c = objload("elf_get_obj_names", elf_file, "symbol_list") + for k,v in ipairs(c) do + print(k,v) + end +end + +function printObjSizes() + local c = objload("elf_get_obj_sizes", elf_file, "symbol_list") + for k,v in ipairs(c) do + print(k,v) + end +end + +function printFuncNames() + local c = objload("elf_get_func_names", elf_file, "symbol_list") + for k,v in ipairs(c) do + print(k,v) + end +end + +function printFuncCode() + local c = objload("elf_get_func_code", elf_file, "code_list") + for k,v in ipairs(c) do + print(k,v) + if #v ~= 0 then + for k1,v1 in ipairs(v) do + io.write(string.format('%02x', v1), " ") + end + io.write("\n") + end + end +end + +function findMain() + local c = objload("elf_get_func_names", elf_file, "symbol_list") + for k,v in ipairs(c) do + if v == "'main'" then + io.write("main index is".." "..k.."\n") + return k + end + end +end + +function codeTables() + local return_table = {} + local func_name_table = objload("elf_get_func_names", elf_file, "symbol_list") + local code_table = objload("elf_get_func_code", elf_file, "code_list") + for i=1,#func_name_table,1 do + return_table[func_name_table[i]] = code_table[i] + end + return return_table +end + +function codeTableByName(name) + local return_table = {} + local func_name_table = objload("elf_get_func_names", elf_file, "symbol_list") + local code_table = objload("elf_get_func_code", elf_file, "code_list") + for k,v in ipairs(func_name_table) do + if v == name then + for k1, v1 in ipairs(code_table[k]) do + table.insert(return_table, string.format('%02x', v1)) + end + return return_table + end + end + return nil +end + +function codeTableByName_number(name) + local return_table = {} + local func_name_table = objload("elf_get_func_names", elf_file, "symbol_list") + local code_table = objload("elf_get_func_code", elf_file, "code_list") + for k,v in ipairs(func_name_table) do + if v == name then + for k1, v1 in ipairs(code_table[k]) do + table.insert(return_table, v1) + end + return return_table + end + end + return nil +end + +function printFuncSizes() + local func_name_table = objload("elf_get_func_names", elf_file, "symbol_list") + local code_table = objload("elf_get_func_code", elf_file, "code_list") + local counter = 1 + print("function sizes:") + for k, v in ipairs(code_table) do + print("code size for "..func_name_table[counter].." is".." "..#v) + counter = counter + 1 + end +end +-------------------------------------------------------------------------------------------------------------- + |