ghidra/Ghidra/Features/Python/ghidra_scripts/AskScriptPy.py

91 lines
3.5 KiB
Python

# An example of asking for user input.
# Note the ability to pre-populate values for some of these variables when AskScript.properties file exists.
# Also notice how the previous input is saved.
# DISCLAIMER: This is a recreation of a Java Ghidra script for example
# use only. Please run the Java version in a production environment.
#@category Examples.Python
from ghidra.framework.model import DomainFile
from ghidra.framework.model import DomainFolder
from ghidra.program.model.address import Address
from ghidra.program.model.lang import LanguageCompilerSpecPair
from ghidra.program.model.listing import Program
from ghidra.util import Msg
from java.lang import IllegalArgumentException
# The presence of the AskScript.properties file in the same location (as AskScript.java)
# allows for the following behavior:
# - GUI: if applicable, auto-populates the input field with the value in the
# .properties file (the first time that input field appears)
# - Headless: uses the value in the .properties file for the variable assigned to the
# corresponding askXxx() method in the GhidraScript.
try:
file1 = askFile("FILE", "Choose file:")
print "file was: " + str(file1)
directory1 = askDirectory("Directory", "Choose directory:")
print "directory was: " + str(directory1)
lang = askLanguage("Language Picker", "I want this one!")
print "language was: " + lang.toString()
domFolder = askProjectFolder("Please pick a domain folder!")
print "domFolder was: " + domFolder.getName()
int1 = askInt("integer 1", "enter integer 1")
int2 = askInt("integer 2", "enter integer 2")
print "int1 + int2 = " + str(int1 + int2)
long1 = askLong("long 1", "enter long 1")
long2 = askLong("long 2", "enter long 2")
print "long1 + long2 = " + str(long1 + long2)
address1 = askAddress("address 1", "enter address 1")
address2 = askAddress("address 2", "enter address 2")
print "address1 + address2 = " + address1.add(address2.getOffset()).toString()
#bytes = askBytes("bytes", "enter byte pattern")
#for b in bytes:
# print "b = " + str(b & 0xff)
prog = askProgram("Please choose a program to open.")
print "Program picked: " + prog.getName()
domFile = askDomainFile("Which domain file would you like?")
print "Domain file: " + domFile.getName()
d1 = askDouble("double 1", "enter double 1")
d2 = askDouble("double 2", "enter double 2")
print "d1 + d2 = " + str(d1 + d2)
myStr = askString("String Specification", "Please type a string: ")
myOtherStr = askString("Another String Specification", "Please type another string: ", "replace me!")
print "You typed: " + myStr + " and " + myOtherStr
choice = askChoice("Choice", "Please choose one", [ "grumpy", "dopey", "sleepy", "doc", "bashful" ], "bashful")
print "Choice? " + choice
choices1 = askChoices("Choices 1", "Please choose one or more numbers.", [ 1, 2, 3, 4, 5, 6 ])
print "Choices 1: "
for intChoice in choices1:
print str(intChoice) + " "
print ""
choices2 = askChoices("Choices 2", "Please choose one or more of the following.",
[ 1.1, 2.2, 3.3, 4.4, 5.5, 6.6 ], ["Part 1", "Part 2", "Part 3", "Part 4", "Part 5", "Part 6" ])
print "Choices 2: "
for intChoice in choices2:
print str(intChoice) + " "
print ""
yesOrNo = askYesNo("yes or no", "is this a yes/no question?")
print "Yes or No? " + str(yesOrNo)
except IllegalArgumentException as error:
Msg.warn(self, "Error during headless processing: " + error.toString())