-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathExportMIPS16Symbols.py
38 lines (26 loc) · 1.35 KB
/
ExportMIPS16Symbols.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#List MIPS16 ASE function names, entry point addresses, and sizes to a file in CSV format
#@author Mathew Marcus
#@category MIPS
#@keybinding
#@menupath
#@toolbar
import csv
from ghidra.program.model.symbol import SourceType
output_file = askFile("Please Select Output File", "Choose")
program = getCurrentProgram()
with open(output_file.getPath(), "w") as output_file:
csv_writer = csv.writer(output_file, quoting=csv.QUOTE_ALL)
csv_writer.writerow(["Name", "Location", "Function Size"])
for function in program.getFunctionManager().getFunctions(True):
if function.isThunk():
continue
addr = function.getEntryPoint()
instruction_context = getInstructionAt(addr).getInstructionContext().getProcessorContext()
isa_mode_register = instruction_context.getRegister("ISA_MODE")
isa_mode_value = instruction_context.getValue(isa_mode_register, False)
if isa_mode_value:
addr = addr.add(isa_mode_value)
# How to get size of function:
# https://github.com/NationalSecurityAgency/ghidra/issues/835
# https://github.com/NationalSecurityAgency/ghidra/blob/master/Ghidra/Features/Base/src/main/java/ghidra/util/table/field/FunctionBodySizeTableColumn.java#L39
csv_writer.writerow([function.getName(), addr.toString(), function.getBody().getNumAddresses()])