diff --git a/GPL/DemanglerGnu/build.gradle b/GPL/DemanglerGnu/build.gradle index a2eea61048..6244215680 100644 --- a/GPL/DemanglerGnu/build.gradle +++ b/GPL/DemanglerGnu/build.gradle @@ -142,7 +142,6 @@ model { all{ b -> def version = b.getApplication().getName() - println "have binary: " + b if (version.equals(v33_1)) { if (toolChain in Gcc) { diff --git a/Ghidra/Configurations/Public_Release/src/global/docs/ChangeHistory.html b/Ghidra/Configurations/Public_Release/src/global/docs/ChangeHistory.html index 9e9c8b5164..6a2e522e61 100644 --- a/Ghidra/Configurations/Public_Release/src/global/docs/ChangeHistory.html +++ b/Ghidra/Configurations/Public_Release/src/global/docs/ChangeHistory.html @@ -6,6 +6,219 @@
++New Features
++
+- Graphing. A new graph service and implementation was created. The graph service provides basic graphing capabilities. It was also used to generate several different types of graphs including code block graphs, call graphs, and AST graphs. In addition, an export graph service was created that supports various formats. (GP-211)
+- PDB. Added a new, prototype, platform-independent PDB analyzer that processes and applies data types and symbols to a program from a raw (non-XML-converted) PDB file, allowing users to more easily take advantage of PDB information. (GT-3112)
+- Processors. Added M8C SLEIGH processor specification. (GT-3052)
+- Processors. Added support for the RISC-V processor. (GT-3389, Issue #932)
+- Processors. Added support for the Motorola 6809 processor. (GT-3390, Issue #1201)
+- Processors. Added CP1600-series processor support. (GT-3426, Issue #1383)
+- Processors. Added V850 processor module. (GT-3523, Issue #1430)
+
+Improvements
++
+- Analysis. Increased the speed of the Embedded Media Analyzer, which was especially poor for large programs, by doing better checking and reducing the number of passes over the program. (GT-3258)
+- Analysis. Improved the performance of the RTTI analyzer. (GT-3341, Issue #10)
+- Analysis. Updated Auto-analysis to preserve work when encountering recoverable exceptions. (GT-3599)
+- Analysis. Improved efficiency when creating or checking for functions and namespaces which overlap. (GP-21)
+- Analysis. Added partial support of Clang for Windows. (GP-64)
+- Analysis. RTTI structure processing speed has been improved with a faster technique for finding the root RTTI type descriptor. (GP-168, Issue #2075)
+- API. The performance of adding large numbers of data types to the same category has been improved. (GT-3535)
+- API. Added the BigIntegerNumberInputDialog that allows users to enter integer values larger than
+Integer.MAX_VALUE
(2147483647). (GT-3607)- API. Made JSON more available using GSON. (GP-89, Issue #1982)
+- Basic Infrastructure. Introduced an extension point
+priority
annotation so users can control extension point ordering. (GT-3350, Issue #1260)- Basic Infrastructure. Changed file names in launch.bat to always run executables from System32. (GT-3614, Issue #1599)
+- Basic Infrastructure. Unknown platforms now default to 64-bit. (GT-3615, Issue #1499)
+- Build. Ghidra's native Windows binaries can now be built using Visual Studio 2019. (GT-3277, Issue #999)
+- Build. Extension builds now exclude gradlew artifacts from zip file. (GT-3631, Issue #1763)
+- Build. Reduced the number of duplicated help files among the build jar files. (GP-57, Issue #2144)
+- Build. Git commit hash has been added to application.properties file for every build (not just releases). (GP-67)
+- Contrib. Extensions are now installed to the user's settings directory, not the Ghidra installation directory. (GT-3639, Issue #1960)
+- Data Types. Added mutability data settings (constant, volatile) for Enum datatype. (GT-3415)
+- Data Types. Improved Structure Editor's Edit Component action to work on array pointers. (GP-205, Issue #1633)
+- Decompiler. Added Secondary Highlights to the Decompiler. This feature allows the user to create a highlight for a token to show all occurrences of that token. Further, multiple secondary highlights are allowed at the same time, each using a unique color. See the Decompiler help for more information. (GT-3292, Issue #784)
+- Decompiler. Added heuristics to the Decompiler to better distinguish whether a constant pointer refers to something in the CODE or DATA address space, for Harvard architectures. (GT-3468)
+- Decompiler. Improved Decompiler analysis of local variables with small data types, eliminating unnecessary casts and mask operations. (GT-3525)
+- Decompiler. Documentation for the Decompiler, accessible from within the Code Browser, has been rewritten and extended. (GP-166)
+- Decompiler. The Decompiler can now display the namespace path (or part of it) of symbols it renders. With the default display configuration, the minimal number of path elements necessary are printed to fully resolve the symbol within the current scope. (GP-236)
+- Decompiler. The Decompiler now respects the Charset and Translate settings for string literals it displays. (GP-237)
+- Decompiler. The Decompiler's analysis of array accesses is much improved. It can detect more and varied access patterns produced by optimized code, even if the base offset is not contained in the array. Multi-dimensional arrays are detected as well. (GP-238, Issue #461, #1348)
+- Decompiler. Extended the Decompiler's support for analyzing class methods. The class data type is propagated through the this pointer even in cases where the full prototype of the method is not known. The methods
+isThisPointer()
andisHiddenReturn()
are now populated in HighSymbol objects and are accessible in Ghidra scripts. (GP-239, Issue #2151)- Decompiler. The Decompiler will now infer a string pointer from a constant that addresses the interior of a string, not just the beginning. (GP-240, Issue #1502)
+- Decompiler. The Decompiler now always prints the full precision of floating-point values, using the minimal number of characters in either fixed point or scientific notation. (GP-241, Issue #778)
+- Decompiler. The Decompiler's Auto Create Structure command now incorporates into new structures data-type information from function prototypes. The Auto Fill in Structure variant of the command will override undefined and other more general data-types with discovered data-types if they are more specific. (GP-242)
+- Demangler. Modified Microsoft Demangler (MDMang) to handle symbols represented by MD5 hash codes when their normal mangled length exceeds 4096. (GT-3409, Issue #1344)
+- Demangler. Upgraded the GNU Demangler to version 2.33.1. Added support for the now-deprecated GNU Demangler version 2.24 to be used as a fallback option for demangling. (GT-3481, Issue #1195, #1308, #1451, #1454)
+- Demangler. The Demangler now more carefully applies information if generic changes have been made. Previously if the function signature had changed in any way from default, the demangler would not attempt to apply any information including the function name. (GP-12)
+- Demangler. Changed MDMang so cast operator names are complete within the qualified function name, effecting what is available from internal API. (GP-13)
+- Demangler. Added additional MDMang Extended Types such as
+char8_t
,char16_t
, andchar32_t
. (GP-14)- Documentation. Removed Eclipse BuildShip instructions from the DevGuide. (GT-3634, Issue #1735)
+- FID. Regenerated FunctionID databases. Added support for Visual Studio versions 2017 and 2019. (GP-170)
+- Function Diff. Users may now add functions ad-hoc to existing function comparison panels. (GT-2229)
+- Function Graph. Added Navigation History Tool option for Function Graph to signal it to produce fewer navigation history entries. (GT-3233, Issue #1115)
+- GUI. Users can now view the Function Tag window to see all functions associated with a tag, without having to inspect the Listing. (GT-3054)
+- GUI. Updated the Copy Special action to work on the current address when there is no selection. (GT-3155, Issue #1000)
+- GUI. Significantly improved the performance of filtering trees in the Ghidra GUI. (GT-3225)
+- GUI. Added many optimizations to increase the speed of table sorting and filtering. (GT-3226, Issue #500)
+- GUI. Improved performance of bit view component recently introduced to Structure Editor. (GT-3244, Issue #1141)
+- GUI. Updated usage of timestamps in the UI to be consistent. (GT-3286)
+- GUI. Added tool actions for navigating to the next/previous functions in the navigation history. (GT-3291, Issue #475)
+- GUI. Filtering now works on all tables in the Function Tag window. (GT-3329)
+- GUI. Updated the Ghidra File Chooser so that users can type text into the list and table views in order to quickly jump to a desired file. (GT-3396)
+- GUI. Improved the performance of the Defined Strings table. (GT-3414, Issue #1259)
+- GUI. Updated Ghidra to allow users to set a key binding to perform an equivalent operation to double-clicking the
+XREF
field in the Listing. See the Show Xrefs action in the Tool Options... Key Bindings section. (GT-3446)- GUI. Improved mouse wheel scrolling in Listing and Byte Viewers. (GT-3473)
+- GUI. Ghidra's action context mechanism was changed so that actions that modify the program are not accidentally invoked in the wrong context, thus possibly modifying the program in ways the user did not want or without the user knowing that it happened. This also fixed an issue where the navigation history drop-down menu did not represent the locations that would be used if the next/previous buttons were pressed. (GT-3485)
+- GUI. Updated Ghidra tables to defer updating while analysis is running. (GT-3604)
+- GUI. Updated Font Size options to allow the user to set any font size. (GT-3606, Issue #160, #1541)
+- GUI. Added ability to overlay text on an icon. (GP-41)
+- GUI. Updated Ghidra options to allow users to clear default key binding values. (GP-61, Issue #1681)
+- GUI. ToggleDirectionAction button now shows in snapshot windows. (GP-93)
+- GUI. Added a new action to the Symbol Tree to allow users to convert a Namespace to a Class. (GP-225, Issue #2301)
+- Importer. Updated the XML Loader to parse symbol names for namespaces. (GT-3293)
+- Importer:ELF. Added support for processing Android packed ELF Relocation Tables. (GT-3320, Issue #1192)
+- Importer:ELF. Added ELF import opinion for ARM BE8. (GT-3642, Issue #1187)
+- Importer:MachO. DYLD Loader can now load x86_64 DYLD from macOS. (GT-3611, Issue #1566)
+- Importer:PE. Improved parsing of Microsoft ordinal map files produced with
+DUMPBIN /EXPORTS
(see Ghidra/Features/Base/data/symbols/README.txt). (GT-3235)- Jython. Upgraded Jython to version 2.7.2. (GP-109)
+- Listing:Data. Improved handling and display of character sequences embedded in operands or integer values. (GT-3347, Issue #1241)
+- Multi-User:Ghidra Server. Added ability to specify initial Ghidra Server user password (
+-a0
mode only) for the svrAdmin add and reset commands. (GT-3640, Issue #321)- Processors. Implemented semantics for
+vstmia/db
vldmia/db
, added missing instructions, and fixed shift value for several instructions for the ARM/Thumb NEON instruction set. (GT-2567)- Processors. Added the XMEGA variant of the AVR8 processor with general purpose registers moved to a non-memory-mapped register space. (GT-2909)
+- Processors. Added support for x86
+SALC
instruction. (GT-3367, Issue #1303)- Processors. Implemented pcode for 6502
+BRK
instruction. (GT-3375, Issue #1049)- Processors. Implemented x86
+PTEST
instruction. (GT-3380, Issue #1295)- Processors. Added missing instructions to ARM language module. (GT-3394)
+- Processors. Added support for
+RDRAND
andRDSEED
instructions to x86-32. (GT-3413)- Processors. Improved x86 breakpoint disassembly. (GT-3421, Issue #872)
+- Processors. Added manual index file for the M6809 processor. (GT-3449, Issue #1414)
+- Processors. Corrected issues related to retained instruction context during a language upgrade. In some rare cases this retained context could interfere with the instruction re-disassembly. This context-clearing mechanism is controlled by a new pspec property:
+resetContextOnUpgrade
. (GT-3531)- Processors. Updated PIC24/PIC30 index file to match latest manual. Added support for dsPIC33C. (GT-3562)
+- Processors. Updated AVR8 ATmega256 processor model to reflect correct memory layout specification. (GT-933)
+- Processors. Added missing call-fixup to handle call side-effects for 32 bit gcc programs for
+get_pc_thunk.ax/si
. (GP-10)- Processors. Added
+ExitProcess
to PEFunctionsThatDoNotReturn. (GP-35)- Processors. External Disassembly field in the Listing now shows Thumb disassembly when appropriate TMode context has been established on a memory location. (GP-49)
+- Processors. Changed RISC-V jump instructions to the more appropriate
+goto
instead ofcall
. (GP-54, Issue #2120)- Processors. Updated AARCH64 to v8.5, including new MTE instructions. (GP-124)
+- Processors. Added support for floating point params and return for SH4 processor calling conventions. (GP-183, Issue #2218)
+- Processors. Added semantic support for many AARCH64 neon instructions. Addresses for register lanes are now precalculated, reducing the amount of p-code generated. (GP-343)
+- Program API. Improved multi-threaded ProgramDB access performance. (GT-3262)
+- Scripting. Improved ImportSymbolScript.py to import functions in addition to generic labels. (GT-3249, Issue #946)
+- Scripting. Python scripts can now call protected methods from the GhidraScript API. (GT-3334, Issue #1250)
+- Scripting. Updated scripting feature with better change detection, external jar dependencies, and modularity. (GP-4)
+- Scripting. Updated the GhidraDev plugin (v2.1.1) to support Python Debugging when PyDev is installed via the Eclipse dropins directory. (GP-186, Issue #1922)
+- Sleigh. Error messages produced by the SLEIGH compiler have been reformatted to be more consistent in layout as well as more descriptive and more consistent in providing line number information. (GT-3174)
+
+Bugs
++
+- Analysis. Fixed an issue where stored context is initializing the set of registers constantly. (GP-25)
+- Analysis. Fixed an RTTI Analyzer regression when analyzing RTTI0 structures with no RTTI4 references to them. (GP-62, Issue #2153)
+- Analysis. Fixed an issue where the RTTI analyzer was not filling out RTTI3 structures in some cases. (GP-111)
+- API. Fixed NullPointerException when attempting to delete all bookmarks from a script. (GT-3405)
+- API. Updated the Class Searcher so that Extension Points found in the Ghidra/patch directory get loaded. (GT-3547, Issue #1515)
+- Build. Updated dependency fetch script to use HTTPS when downloading CDT. (GP-69, Issue #2173)
+- Build. Fixed resource leak in Ghidra jar builder. (GP-342)
+- Byte Viewer. Fixed Byte Viewer to correctly load the middle-mouse highlight color options change. (GT-3471, Issue #1464, #1465)
+- Data Types. Fixed decoding of static strings that have a character set with a smaller character size than the platform's character size. (GT-3333, Issue #1255)
+- Data Types. Correctly handle Java character sets that do not support the encoding operation. (GT-3407, Issue #1358)
+- Data Types. Fixed bug that caused Data Type Manager Editor key bindings to get deleted. (GT-3411, Issue #1355)
+- Data Types. Updated the DataTypeParser to handle data type names containing templates. (GT-3493, Issue #1417)
+- Data Types. Corrected pointer data type
+isEquivalent()
method to properly check the equivalence of the base data type. The old implementation could cause a pointer to be replaced by a conflicting pointer with the same name whose base datatype is not equivalent. This change has a negative performance impact associated with it and can cause additional conflict datatypes due to the rigid datatype relationships. (GT-3557)- Data Types. Improved composite conflict resolution performance and corrected composite merge issues when composite bitfields and/or flexible arrays are present. (GT-3571)
+- Data Types. Corrected size of
+long
for AARCH64 per LP64 standard. (GP-175)- Decompiler. Fixed bug causing the Decompiler to miss symbol references when they are stored to the heap. (GT-3267)
+- Decompiler. Fixed bug in the Decompiler that caused
+Deleting op with descendants
exception. (GT-3506)- Decompiler. Decompiler now correctly compensates for integer promotion on shift, division, and remainder operations. (GT-3572)
+- Decompiler. Fixed handling of 64-bit implementations of alloca_probe in the Decompiler. (GT-3576)
+- Decompiler. Default Decompiler options now minimize the risk of losing code when renaming or retyping variables. (GT-3577)
+- Decompiler. The Decompiler no longer inherits a variable name from a subfunction if that variable incorporates additional data-flow unrelated to the subfunction. (GT-3580)
+- Decompiler. Fixed the Decompiler Override Signature action to be enabled on the entire C-code statement. (GT-3636, Issue #1589)
+- Decompiler. Fixed frequent ClassCast and IllegalArgument exceptions when performing Auto Create Structure or Auto Create Class actions in the Decompiler. (GP-119)
+- Decompiler. Fixed a bug in the Decompiler that caused different variables to be assigned the same name in rare instances. (GP-243, Issue #1995)
+- Decompiler. Fixed a bug in the Decompiler that caused
+PTRSUB off of non-pointer type
exceptions. (GP-244, Issue #1826)- Decompiler. Fixed a bug in the Decompiler that caused load operations from volatile memory to be removed as dead code. (GP-245, Issue #393, #1832)
+- Decompiler. Fixed a bug causing the Decompiler to miss a stack alias if its offset was, itself, stored on the stack. (GP-246)
+- Decompiler. Fixed a bug causing the Decompiler to lose Equate references to constants passed to functions that were called indirectly. (GP-247)
+- Decompiler. Addressed various situations where the Decompiler unexpectedly removes active instructions as dead code after renaming or retyping a stack location. If the location was really an array element or structure field, renaming forced the Decompiler to treat the location as a distinct variable. Subsequently, the Decompiler thought that indirect references based before the location could not alias any following stack locations, which could then by considered dead. As of the 9.2 release, the Decompiler's renaming action no longer switches an annotation to
+forcing
if it wasn't already. A retyping action, although it isforcing
, won't trigger alias blocking for atomic data-types (this is configurable). (GP-248, Issue #524, #873)- Decompiler. Fixed decompiler memory issues reported by a community security researcher. (GP-267)
+- Demangler. Fixed the GnuDemangler to parse the full namespace for
+operator
symbols. (GT-3474, Issue #1441, #1448)- Demangler. Fixed numerous GNU Demangler parsing issues. Most notable is the added support for C++ Lambda functions. (GT-3545, Issue #1457, #1569)
+- Demangler. Updated the GNU Demangler to correctly parse and apply C++ strings using the
+unnamed type
syntax. (GT-3645)- Demangler. Fixed duplicate namespace entry returned from
+getNamespaceString()
on DemangledVariable. (GT-3646, Issue #1729)- Demangler. Fixed a GnuDemangler ClassCastException when parsing a
+typeinfo
string containingoperator
text. (GP-160, Issue #1870, #2267)- Demangler. Added stdlib.h include to the GNU Demangler to fix a build issue on some systems. (GP-187, Issue #2294)
+- DWARF. Corrected DWARF relocation handling where the address image base adjustment was factored in twice. (GT-3330)
+- File Formats. Fixed a potential divide-by-zero exception in the EXT4 file system. (GT-3400, Issue #1342)
+- File Formats. Fixed date and time parsing of dates in cdrom
+iso9660
image files. (GT-3451, Issue #1403)- Graphing. Fixed a ClassCastException sometimes encountered when performing Select -> Scoped Flow -> Forward Scoped Flow. (GP-180)
+- GUI. Fixed inconsistent behavior with the interactive python interpreter's key bindings. (GT-3282)
+- GUI. Fixed Structure Editor bug that prevented the F2 Edit action from editing the correct table cell after using the arrow keys. (GT-3308, Issue #703)
+- GUI. Updated the Structure Editor so the Delete action is put into a background task to prevent the UI from locking. (GT-3352)
+- GUI. Fixed IndexOutOfBoundsException when invoking column filter on Key Bindings table. (GT-3445)
+- GUI. Fixed the analysis log dialog to not consume all available screen space. (GT-3610)
+- GUI. Fixed issue where Location column, when used in the column filters, resulted in extraneous dialogs popping up. (GT-3623)
+- GUI. Fixed Data Type Preview copy action so that newlines are preserved; updated table export to CSV to escape quotes and commas. (GT-3624)
+- GUI. Fixed tables in Ghidra to copy the text that is rendered. Some tables mistakenly copied the wrong value, such as the Functions Table's Function Signature Column. (GT-3629, Issue #1628)
+- GUI. Structure editor name now updates in title bar and tab when structure is renamed. (GP-19)
+- GUI. Fixed an issue where drag-and-drop import locks the Windows File Explorer source window until the import dialog is closed by the user. (GP-27)
+- GUI. Fixed an issue in GTreeModel where fireNodeChanged had no effect. This could result in stale node information and truncation of the text associated with a node in a GTree. (GP-30)
+- GUI. Fixed an issue where the file chooser directory list truncated filenames with ellipses on HiDPI Windows. (GP-31)
+- GUI. Fixed an uncaught exception when double-clicking on
+UndefinedFunction_
in Decompiler window. (GP-40)- GUI. Updated error handling to only show one dialog when a flurry of errors is encountered. (GP-65, Issue #2185)
+- GUI. Fixed an issue where Docking Windows are restored incorrectly if a snapshot is present. (GP-92)
+- GUI. Fixed a File Chooser bug causing a NullPointerException for some users. (GP-171, Issue #1706)
+- GUI. Fixed an issue that caused the script progress bar to appear intermittently. (GP-179, Issue #1819)
+- GUI. Fixed a bug that caused Call Tree nodes to go missing when showing more than one function with the same name. (GP-213, Issue #1682)
+- GUI:Project Window. Fixed Front End copy action to allow for the copy of program names so that users can paste those names into external applications. (GT-3403, Issue #1257)
+- Headless. Headless Ghidra now properly honors the
+-processor
flag, even if the specified processor is not a valid opinion. (GT-3376, Issue #1311)- Importer. Corrected an NeLoader flags parsing error. (GT-3381, Issue #1312)
+- Importer. Fixed the File -> Add to Program... action to not show a memory conflict error when the user is creating an overlay. (GT-3491, Issue #1376)
+- Importer. Updated the XML Importer to apply repeatable comments. (GT-3492, Issue #1423)
+- Importer. Fixed issue in Batch Import where only one item of a selection was removed when attempting to remove a selection of items. (GP-138)
+- Importer. Corrected various issues with processing crushed PNG images. (GP-146, Issue #1854, #1874, #1875, #2252)
+- Importer. Fixed RuntimeException occurrence when trying to load NE programs with unknown resources. (GP-182, Issue #1596, #1713, #2012)
+- Importer. Fixed batch import to handle IllegalArgumentExceptions thrown by loaders. (GP-227, Issue #2328)
+- Importer:ELF. Corrected ELF relocation processing for ARM BE8 (mixed-endian). (GT-3527, Issue #1494)
+- Importer:ELF. Corrected ELF import processing of
+DT_JMPREL
relocations and markup of associated PLT entries. (GP-252, Issue #2334)- Importer:PE. Fixed an IndexOutOfBoundsException in the PeLoader that occurred when the size of a section extends past the end of the file. (GT-3433, Issue #1371)
+- Listing:Comments. Fixed bug in Comment field that prevented navigation when clicking on an address or symbol where tabs were present in the comment. (GT-3440)
+- Memory. Fixed bug where sometimes random bytes are inserted instead of
+0x00
when expanding a memory block. (GT-3465)- Processors. Corrected the offset in SuperH instructions generated by sign-extending a 20-bit immediate value composed of two sub-fields. (GT-3251, Issue #1161)
+- Processors. Fixed AVR8 addition/subtraction flag macros. (GT-3276)
+- Processors. Corrected
+XGATE
ROR
instruction semantics. (GT-3278)- Processors. Corrected semantics for SuperH
+movi20
andmovi20s
instructions. (GT-3337, Issue #1264)- Processors. Corrected SuperH floating point instruction token definition. (GT-3340, Issue #1265)
+- Processors. Corrected SuperH
+movu.b
andmovu.w
instruction semantics. (GT-3345, Issue #1271)- Processors. Corrected AVR8
+lpm
andelpm
instruction semantics. (GT-3346, Issue #631)- Processors. Corrected pcode for the 6805
+BSET
instruction. (GT-3366, Issue #1307)- Processors. Corrected ARM constructors for instructions
+vnmla
,vnmls
, andvnmul
. (GT-3368, Issue #1277)- Processors. Corrected bit-pattern for ARM
+vcvt
instruction. (GT-3369, Issue #1278)- Processors. Corrected TriCore
+abs
instructions. (GT-3379, Issue #1286)- Processors. Corrected x86
+BT
instruction semantics. (GT-3423, Issue #1370)- Processors. Fixed issue where CRC16C
+LOAD
/STOR
withabs20
were not mapped correctly. (GT-3529, Issue #1518)- Processors. Fixed M68000
+MOVE USP,x
andMOVE x,USP
opcodes. (GT-3594, Issue #1593)- Processors. Fixed the ARM/Thumb
+TEQ
instruction pcode to be an XOR. (GP-23, Issue #1802)- Processors. Emulation was broken by a regression in version 9.1.2. Emulation and Sleigh Pcodetests now work correctly. (GP-24, Issue #1579)
+- Processors. Fixed carry flag issue for 6502
+CMP
,CPX
, andCPY
instructions. (GP-34)- Processors. Corrected the SuperH high-order bit calculation for the
+rotr
instruction. (GP-47)- Processors. Corrected ELF ARM relocation processing for type 3 (
+R_ARM_REL32
) and added support for type 42 (R_ARM_PREL31
). (GP-164, Issue #2261, #2276)- Scripting. Moved Jython cache directory out of tmp. (GP-36)
+- Scripting. Fixed a NoClassDefFoundError when compiling GhidraScript under JDK14. (GP-59, Issue #2152)
+- Scripting. Fixed issues with null result when searching for the script directory. (GP-103, Issue #2187)
+- Scripting. Fixed scripting issue where, if there were non-ASCII characters in the user path, Jython would not work. (GP-204, Issue #1890)
+- Sleigh. Corrected IndexOutOfBoundsException in SLEIGH when doing simple assignment in disassembly actions block. (GT-3382, Issue #745)
+- Symbol Tree. Fixed the Symbol Tree so that clicking an already-selected symbol node will still trigger a Listing navigation. (GT-3436, Issue #453)
+- Symbol Tree. Fixed the Symbol Tree to not continuously rebuild while performing Auto-analysis. (GT-3542)
+- Version Tracking. Fixed Version Tracking Create Manual Match action. (GT-3305, Issue #2215)
+- Version Tracking. Fixed a NullPointerException encountered when changing the Version Tracking options for the Listing Code Comparison when no data was loaded. (GT-3437, Issue #1143)
+- Version Tracking. Fixed Version Tracking exception triggered in the Exact Functions Instructions Match correlator encountered when the two functions being compared differed in their number of instructions. (GT-3438, Issue #1352)
+
@@ -31,6 +244,7 @@Bugs
@@ -16,11 +229,11 @@
- GUI. Corrected processor manual display for Microsoft Windows users, which was not displaying processor manual and was, instead, rendering a blank page in web browser. (GT-3444)
- GUI:Bitfield Editor. Added field comment support to composite bitfield editor. (GT-3410)
- Importer:MachO. A MachO loader regression, in Ghidra 9.1.1, when laying down symbols at the correct location, has been fixed. (GT-3487, Issue #1446)
-- Languages. Corrected mnemonic for ARM thumb
-RSB.w
instruction. (GT-3420, Issue #1365)- Languages. Corrected issue in M68000 with some move instructions not creating correct array assignments. (GT-3429, Issue #1394)
-- Languages. Updated x86 processor manual index file with latest Intel and AMD manuals. (GT-3489, Issue #1078)
- Multi-User:Ghidra Server. Corrected Ghidra Server remote interface errors that occur when running with Java 11.0.6 (and later) release, which would throw RemoteException
"Method is not Remote"
errors. (GT-3521, Issue #1440)- PDB. Corrected PDB XML generation for zero-length classes and structures and resolved various datatype dependency issues encountered during PDB Analysis. Changed line numbers from hex to decimal. (GT-3462, Issue #1410)
+- Processors. Corrected mnemonic for ARM thumb
+RSB.w
instruction. (GT-3420, Issue #1365)- Processors. Corrected issue in M68000 with some move instructions not creating correct array assignments. (GT-3429, Issue #1394)
+- Processors. Updated x86 processor manual index file with latest Intel and AMD manuals. (GT-3489, Issue #1078)
@@ -64,21 +278,20 @@Bugs
- Analysis. Fixed a symbol name error that occurred in the Objective-C analyzer. (GT-3321, Issue #1200)
@@ -42,17 +256,17 @@- Decompiler. Fixed issue with enum name strings causing
Low-level Error: XML error: syntax error
in the decompiler. (GT-3387, Issue #1329)- GUI. Fixed a potential ConcurrentModificationException in the interactive python interpreter. (GT-3280)
- Importer:PE. Fixed an exception in the PeLoader that occurred when the size of the memory block for the headers is larger than the file size. (GT-3344, Issue #1266)
-- Languages. Corrected Sparc floating point instruction pcode implementation. (GT-3202)
-- Languages. Corrected the semantics of the PowerPC
-e_cmpi
instruction. (GT-3228, Issue #1127)- Languages. Corrected bit generation for PowerPC instructions
-se_bclri
,se_bgeni
,se_bseti
, andse_btsti
. (GT-3232, Issue #967)- Languages. Corrected register definitions for x86
-RDRAND
instruction. (GT-3253, Issue #1169)- Languages. Corrected signed immediate calculation for some powerPC VLE offsets being incorrect. (GT-3254, Issue #1160)
-- Languages. Resolved issue with x86 escape opcodes preventing certain instruction patterns from decoding. (GT-3256)
-- Languages. Corrected bug in
-XGATE
LDH
instruction shifting out high bits. (GT-3268)- Languages. Corrected processing of
R_MIPS_REL32
,R_X86_64_RELATIVE
, andR_X86_64_RELATIVE64
ELF relocations affecting relocatable binaries which have non-zero section/segment load addresses. (GT-3349)- Listing. Fixed missing scroll bar in listing. (GT-3290)
- Listing. Fixed issue that was causing a stack trace to be generated when contiguous addresses were cleared for a range greater than
Integer.MAX
. (GT-3357)- Listing:References. Corrected Create Default Reference action bug which did not handle composite/array data components properly. (GT-3371)
+- Processors. Corrected Sparc floating point instruction pcode implementation. (GT-3202)
+- Processors. Corrected the semantics of the PowerPC
+e_cmpi
instruction. (GT-3228, Issue #1127)- Processors. Corrected bit generation for PowerPC instructions
+se_bclri
,se_bgeni
,se_bseti
, andse_btsti
. (GT-3232, Issue #967)- Processors. Corrected register definitions for x86
+RDRAND
instruction. (GT-3253, Issue #1169)- Processors. Corrected signed immediate calculation for some powerPC VLE offsets being incorrect. (GT-3254, Issue #1160)
+- Processors. Resolved issue with x86 escape opcodes preventing certain instruction patterns from decoding. (GT-3256)
+- Processors. Corrected bug in
+XGATE
LDH
instruction shifting out high bits. (GT-3268)- Processors. Corrected processing of
R_MIPS_REL32
,R_X86_64_RELATIVE
, andR_X86_64_RELATIVE64
ELF relocations affecting relocatable binaries which have non-zero section/segment load addresses. (GT-3349)
Improvements
- Analysis. Added example script, ResolveX86orX64LinuxSyscallsScript.java, for decompiling Linux system calls in x86 and x64. Added syscall-related exercises to Advanced class. (GT-3113)
@@ -123,18 +336,6 @@- Importer:PE. PeLoader better accounts for section alignment when laying out memory blocks, allowing additional bytes from the file to be loaded into memory. (GT-2827, Issue #327, #418)
- Importer:PE. Removed out-of-place call to demangler and laying down of types from PeLoader. This fix enables demangling and other analyzers to be applied correctly and in the proper order. (GT-2849)
- Importer:PE. PeLoader now adds TLS callback functions as entry points. (GT-2898, Issue #102)
-- Languages. Added new Task Monitor service to better handle user experience when there are delays in building languages. (GT-2376)
-- Languages. Corrected ARM/Thumb instruction parsing for Thumb
-bl
andadd
instructions. (GT-2744, Issue #362)- Languages. Added AVR8 manual index file. (GT-2828, Issue #346)
-- Languages. Improved support for ARM on Windows. (GT-2880)
-- Languages. M68000
-LSL.W
,ASL.B
,LSL.B
, andASL.W
instructions now correctly set theCF
flag. (GT-2907, Issue #619)- Languages. Updated x86 manual index files. (GT-2943, Issue #366)
-- Languages. Improved macro label-related error reporting in slaspec files. (GT-2995, Issue #522)
-- Languages. Added MIPS special
-0x1f
patterns. (GT-3005, Issue #709)- Languages. Added proper updating of the
-X
condition flag register for the M68000 processorlsl
andlsr
instructions. (GT-3137, Issue #983)- Languages. Implemented PowerPc VLE Interrupt Handler Efficiency Instructions. (GT-3143, Issue #935)
-- Languages. Ghidra now correctly models SPARC 64-bit stack bias. (GT-3201)
-- Languages. Updated AVR32 instruction manual index to latest version. (GT-712)
- Listing. Updated Listing to support horizontal scrolling by holding the Shift key when using the mouse wheel. (GT-3105, Issue #451)
- Listing:References. Created new overriding reference types, which improve and extend the ability to override calls, jumps, and callothers. (GT-2885)
- Multi-User. Added a script to allow repository admins the ability to terminate multiple file checkouts belonging to an individual user on a shared project. (GT-2893)
@@ -143,6 +344,18 @@- PDB. Now using HTTPS for Microsoft symbol server URL. (GT-2819, Issue #369)
- PDB. PDB processing can now store data types that contain forward slashes under a CategoryPath. (GT-2974, Issue #94, #182)
- PDB. PDB Analyzer no longer automatically includes the PDB path specified in the program's PE header when searching for the PDB. However, the filename in this path is considered during the search. The analyzer's Unsafe: Include PE PDB Path in PDB Search option allows the user to revert to the original PDB search algorithm. (GT-3076, Issue #277)
+- Processors. Added new Task Monitor service to better handle user experience when there are delays in building languages. (GT-2376)
+- Processors. Corrected ARM/Thumb instruction parsing for Thumb
+bl
andadd
instructions. (GT-2744, Issue #362)- Processors. Added AVR8 manual index file. (GT-2828, Issue #346)
+- Processors. Improved support for ARM on Windows. (GT-2880)
+- Processors. M68000
+LSL.W
,ASL.B
,LSL.B
, andASL.W
instructions now correctly set theCF
flag. (GT-2907, Issue #619)- Processors. Updated x86 manual index files. (GT-2943, Issue #366)
+- Processors. Improved macro label-related error reporting in slaspec files. (GT-2995, Issue #522)
+- Processors. Added MIPS special
+0x1f
patterns. (GT-3005, Issue #709)- Processors. Added proper updating of the
+X
condition flag register for the M68000 processorlsl
andlsr
instructions. (GT-3137, Issue #983)- Processors. Implemented PowerPc VLE Interrupt Handler Efficiency Instructions. (GT-3143, Issue #935)
+- Processors. Ghidra now correctly models SPARC 64-bit stack bias. (GT-3201)
+- Processors. Updated AVR32 instruction manual index to latest version. (GT-712)
- Program API. Added SHA256 hash to Program metadata and API. (GT-2753, Issue #331)
- Scripting. Updated Script Table Chooser Dialog: to fix bug with tracking work items, to add new API methods for item removal and dialog closed notification, and to prevent the same item from being worked on more than once. (GT-2724, Issue #307)
- Scripting. Fixed MultiInstructionMemReference Ghidra script to place the reference correctly on instructions with a delay slot. (GT-2906)
@@ -216,25 +429,6 @@- Importer:ELF. Improved ELF MIPS support for GP-relative relocations encountered in PIC compiled binaries. Also added support for
R_MIPS_RPREL32
relocation. (GT-3026, Issue #764)- Importer:ELF. ELF x86-64 relocations
R_X86_64_GOT32
,R_X86_64_PLT32
,R_X86_64_SIZE32
,R_X86_64_SIZE64
, andR_X86_64_GOTPC32
have been fixed to relocate correctly. Additional ELF x86-64 relocations, found mostly in unlinked .o files, have been added. (GT-3089, Issue #910)- Importer:PE. Fixed a problem in the PeLoader that would result in section names being incorrectly used as primary symbols. This could result in function names being wrong. (GT-3195, Issue #761, #1051)
-- Languages. Utilized
-FLOAT_NEG
pcodeop to simplify PowerPCfneg
instructions. (GT-2781, Issue #387)- Languages. Added 6502
-I
status bit save and restore. (GT-2826, Issue #469)- Languages. Corrected alternate register definitions in z80 processor. (GT-2876, Issue #520)
-- Languages. Reviewed all processor modules for GhidraSleighEditor syntax errors. (GT-2902)
-- Languages. Added support for
-RD
,WR
,FS
, andGSBASE
instructions in x86. (GT-2940, Issue #554, #555)- Languages. Added fixes for sign extension of
-ADD
,AND
,CMP
, andSUB
instructions on x86-64bit. (GT-2955, Issue #881)- Languages. Updated PIC-30 division pcode to correct decompilation issue. (GT-3008)
-- Languages. Fixed x86
-AAM
instruction. (GT-3015)- Languages. Corrected x86 decode of
-MOVBE
instruction. (GT-3039, Issue #822)- Languages. Corrected M68000
-mov3q
instruction decode and semantics. (GT-3080, Issue #905)- Languages. The JVM instruction
-I2D
now correctly pushes an 8-byte double on the stack. (GT-3081)- Languages. Fixed problem displaying processor manuals in Windows Firefox. (GT-3084)
-- Languages. Encoding of
-MOV
into debug registers has been relaxed. (GT-3117)- Languages. Corrected behavior of PowerPC
-vectorPermute
pcodeop for emulation. (GT-3148)- Languages. Corrected MIPS relocation computation for
-R_MIPS_26
,R_MIPS16_26
, andR_MICROMIPS_26_S1
. (GT-3154, Issue #1001)- Languages. Corrected the bit patterns for PowerPC VLE
-rlwimi
andrlwinm
instructions. (GT-3159, Issue #752)- Languages. Corrected instruction semantics for AARCH64
-BLR
instruction. (GT-3191)- Languages. Corrected fall-through override semantics for cases where pcode simply drops into the next address. (GT-3196, Issue #1083)
-- Languages. Corrected the semantics of the PowerPC
se_bmaski
instruction. (GT-3230, Issue #1123)- Listing. Fixed potential infinite loop when editing long comments. (GT-2824, Issue #437)
- Listing. Fixed potential ClassCastException in Listing comments. (GT-3023)
- Listing. Cursor in the listing now stays in the proper column after editing a field. (GT-3045, Issue #702)
@@ -248,6 +442,25 @@- PDB. Addressed memory leaks and string handling issues in pdb.exe. (GT-2975, Issue #674, #597, #598, #599, #600)
- PDB. Can now recover stack variables from more recent Visual Studio version PDBs. (GT-3014)
- PDB. Fixed PDB validation logic, which caused a more severe error message to be created, masking the real issue. (GT-3209, Issue #198, #1024)
+- Processors. Utilized
+FLOAT_NEG
pcodeop to simplify PowerPCfneg
instructions. (GT-2781, Issue #387)- Processors. Added 6502
+I
status bit save and restore. (GT-2826, Issue #469)- Processors. Corrected alternate register definitions in z80 processor. (GT-2876, Issue #520)
+- Processors. Reviewed all processor modules for GhidraSleighEditor syntax errors. (GT-2902)
+- Processors. Added support for
+RD
,WR
,FS
, andGSBASE
instructions in x86. (GT-2940, Issue #554, #555)- Processors. Added fixes for sign extension of
+ADD
,AND
,CMP
, andSUB
instructions on x86-64bit. (GT-2955, Issue #881)- Processors. Updated PIC-30 division pcode to correct decompilation issue. (GT-3008)
+- Processors. Fixed x86
+AAM
instruction. (GT-3015)- Processors. Corrected x86 decode of
+MOVBE
instruction. (GT-3039, Issue #822)- Processors. Corrected M68000
+mov3q
instruction decode and semantics. (GT-3080, Issue #905)- Processors. The JVM instruction
+I2D
now correctly pushes an 8-byte double on the stack. (GT-3081)- Processors. Fixed problem displaying processor manuals in Windows Firefox. (GT-3084)
+- Processors. Encoding of
+MOV
into debug registers has been relaxed. (GT-3117)- Processors. Corrected behavior of PowerPC
+vectorPermute
pcodeop for emulation. (GT-3148)- Processors. Corrected MIPS relocation computation for
+R_MIPS_26
,R_MIPS16_26
, andR_MICROMIPS_26_S1
. (GT-3154, Issue #1001)- Processors. Corrected the bit patterns for PowerPC VLE
+rlwimi
andrlwinm
instructions. (GT-3159, Issue #752)- Processors. Corrected instruction semantics for AARCH64
+BLR
instruction. (GT-3191)- Processors. Corrected fall-through override semantics for cases where pcode simply drops into the next address. (GT-3196, Issue #1083)
+- Processors. Corrected the semantics of the PowerPC
se_bmaski
instruction. (GT-3230, Issue #1123)- Program API. Corrected parameter storage which failed to properly refresh after undo/redo. (GT-3130, Issue #960)
- Program API. Corrected function parameter ordinal numbering when more than one auto-parameter is present. (GT-3214)
- Project Manager. Fixed a problem with creating Ghidra projects in Windows root directories (e.g., Z:\). (GT-2585)
@@ -262,164 +475,130 @@
-Bugs
+Bugs
- -
- Multi-User:Ghidra Server. Corrected severe script error in svrAdmin.bat introduced with 9.0.3 build.
-- GUI. Restored the default 'p' key binding for creating pointers within the listing display.
- +- Multi-User:Ghidra Server. Corrected severe script error in svrAdmin.bat introduced with 9.0.3 build.
+- GUI. Restored the default 'p' key binding for creating pointers within the listing display.
Ghidra 9.0.3 Change History (April 2019)
- --New Feature
+-New Features
- -
- GUI. Function tags are now viewable from Functions Window table using new column.
- +- GUI. Function tags are now viewable from Functions Window table using new column.
-Improvements
+-Improvements
- -
- Decompiler. Improved modeling of CFG on Windows 10. (Issue #340)
-- Patcher. Renamed patch directory to /Ghidra/patch and added README.txt that explains how the patch directory is used.
-- Search. Updated the Decompiler Data Type Finder to find references to inside of nested array access in a line of Decompiler C output. (Issue #416)
-- Sleigh. Improved error reporting for SLEIGH compiler. (Issue #364)
- +- Decompiler. Improved modeling of CFG on Windows 10. (Issue #340)
+- Patcher. Renamed patch directory to /Ghidra/patch and added README.txt that explains how the patch directory is used.
+- Search. Updated the Decompiler Data Type Finder to find references to inside of nested array access in a line of Decompiler C output. (Issue #416)
+- Sleigh. Improved error reporting for SLEIGH compiler. (Issue #364)
-Bugs
+Bugs
- -
- Analysis. Code that checks for thunks no longer throws an exception if the PC is not set for the processor.
-- Analysis. Made a fix to enable Apply button when changing tool options. (Issue #40)
-- Data Types. Fixed concurrent modification exception when replacing one datatype for another that results in some other datatype being renamed.
-- Decompiler. Fixed dynamic variables and equates in 16-bit x86 programs. (Issue #336)
-- Decompiler:Java. Fixed DEX decompilation regression issue. (Issue #350)
-- Eclipse Integration. Fixed exception in Eclipse GhidraDev plugin that occurred when performing certain actions on a Ghidra project that was imported from a previously exported Archive File. (Issues #283, #383)
-- GUI. Improved documentation on how to deal with HiDPI monitor issues in Linux. In the <ghidra_installation>/support/launch.properties file, change VMARGS=-Dsun.java2d.xrender from false to true.
-- Importer. Fixed an exception that occurred when batch importing APK files. (Issue #426)
-- Languages. The 6502 Zero page indexed addressing has been corrected to only access the Zero page. (Issue #201)
-- Languages. The 68000 BCD arithmetic instructions now have pcode semantics that allow disassembly to continue. (Issue #227)
-- Multi-User:Ghidra Server. Restored ability to execute svrAdmin script in development mode.
-- Search. Fixed NullPointerException in Decompiler Data Type Reference Finder. (Issue #407)
- +- Analysis. Code that checks for thunks no longer throws an exception if the PC is not set for the processor.
+- Analysis. Made a fix to enable Apply button when changing tool options. (Issue #40)
+- Data Types. Fixed concurrent modification exception when replacing one datatype for another that results in some other datatype being renamed.
+- Decompiler. Fixed dynamic variables and equates in 16-bit x86 programs. (Issue #336)
+- Decompiler:Java. Fixed DEX decompilation regression issue. (Issue #350)
+- Eclipse Integration. Fixed exception in Eclipse GhidraDev plugin that occurred when performing certain actions on a Ghidra project that was imported from a previously exported Archive File. (Issues #283, #383)
+- GUI. Improved documentation on how to deal with HiDPI monitor issues in Linux. In the <ghidra_installation>/support/launch.properties file, change VMARGS=-Dsun.java2d.xrender from false to true.
+- Importer. Fixed an exception that occurred when batch importing APK files. (Issue #426)
+- Multi-User:Ghidra Server. Restored ability to execute svrAdmin script in development mode.
+- Processors. The 6502 Zero page indexed addressing has been corrected to only access the Zero page. (Issue #201)
+- Processors. The 68000 BCD arithmetic instructions now have pcode semantics that allow disassembly to continue. (Issue #227)
+- Search. Fixed NullPointerException in Decompiler Data Type Reference Finder. (Issue #407)
Ghidra 9.0.2 Change History (April 2019)
- --Bugs
+-Bugs
- -
- Analysis. Constant reference analysis boundary controls for speculative references has been fixed. Speculative references are references created from computed constants passed as parameters, stored to a location, or from indexed offsets from a register. (Issue #228)
- -- Decompiler. Fixed rendering bug in the Decompiler when the "Find" dialog is closed. (Issue #282)
-- Decompiler. Fixed decompiler handling of Function Definition data types. (Issue #247)
- -- Decompiler. Fixed "Free Varnode" exception in RuleConditionalMove. (Issue #294)
- -- Diff. Fixed exceptions that can occur in the Diff View for programs with overlays.
- -- Documentation. Corrected the spelling of "listener" throughout the source code. (Issue #235)
-- Exporter. Exporting a selection as Intel Hex will now allow a selection of any length. Previously this was restricted to multiples of 16 bytes. (Issue #260)
-- GUI. Fixed exception that occurs after disabling MyProgramChangesDisplayPlugin.
- -- GUI. Updated the "Open Program" dialog to disallow file drop operations. (Issue #252) - -
- Languages. The ARM Thumb CMP.W and LSL isntructions have been changed to correctly decode. There are still issues to work out with Unpredictable execution when Rd is the PC. (Issue #280)
-- Multi-User:Ghidra Server. Corrected bug introduced into ghidraSvr.bat which could prevent Ghidra Server startup (Issue #279)
- -- Scripting. MultiInstructionMemReference script has been corrected to consider input and output registers when placing a reference on an instruction.
- +- Analysis. Constant reference analysis boundary controls for speculative references has been fixed. Speculative references are references created from computed constants passed as parameters, stored to a location, or from indexed offsets from a register. (Issue #228)
+- Decompiler. Fixed rendering bug in the Decompiler when the "Find" dialog is closed. (Issue #282)
+- Decompiler. Fixed decompiler handling of Function Definition data types. (Issue #247)
+- Decompiler. Fixed "Free Varnode" exception in RuleConditionalMove. (Issue #294)
+- Diff. Fixed exceptions that can occur in the Diff View for programs with overlays.
+- Documentation. Corrected the spelling of "listener" throughout the source code. (Issue #235)
+- Exporter. Exporting a selection as Intel Hex will now allow a selection of any length. Previously this was restricted to multiples of 16 bytes. (Issue #260)
+- GUI. Fixed exception that occurs after disabling MyProgramChangesDisplayPlugin.
+- GUI. Updated the "Open Program" dialog to disallow file drop operations. (Issue #252) +
- Multi-User:Ghidra Server. Corrected bug introduced into ghidraSvr.bat which could prevent Ghidra Server startup (Issue #279)
+- Processors. The ARM Thumb CMP.W and LSL instructions have been changed to correctly decode. There are still issues to work out with Unpredictable execution when Rd is the PC. (Issue #280)
+- Scripting. MultiInstructionMemReference script has been corrected to consider input and output registers when placing a reference on an instruction.
-Security
+Security
- -
- Basic Infrastructure. Added a property to support/launch.properties to prevent log4j from using jansi.dll on Windows. (Issue #286)
- +- Basic Infrastructure. Added a property to support/launch.properties to prevent log4j from using jansi.dll on Windows. (Issue #286)
Ghidra 9.0.1 Change History (March 2019)
- --New Features
+-New Features
-
- Scripting. Created a script to show all equates within the current selection. (Issue #111)
+- Scripting. Created a script to show all equates within the current selection. (Issue #111)
-Improvements
+-Improvements
-
- Basic Infrastructure. Updated commons-compress library to version 1.18. (Issue #171)
-- Eclipse Integration. Ghidra now connects to the Eclipse GhidraDev plugin on 127.0.0.1 rather than localhost.
-- GUI. Turned on font anti-aliasing by default for Linux. (Issue #212)
-- GUI. Fixed Options Dialog slow scrolling speed. (Issue #27)
-- Importer:ELF. Corrected bug in ELF loader which can improperly process the GOT, PLT and relocations - when multiple symbol tables exist within the ELF binary. (Issue #52)
-- Languages. Added ARM/Thumb SRS instruction decodes for undefined modes. (Issue #216)
-- Multi-User:Ghidra Server. Corrected the Ghidra Server service wrapper (YAJSW) configuration for - Mac OS X to prevent a startup timeout condition which could occur.
+- Basic Infrastructure. Updated commons-compress library to version 1.18. (Issue #171)
+- Eclipse Integration. Ghidra now connects to the Eclipse GhidraDev plugin on 127.0.0.1 rather than localhost.
+- GUI. Turned on font anti-aliasing by default for Linux. (Issue #212)
+- GUI. Fixed Options Dialog slow scrolling speed. (Issue #27)
+- Importer:ELF. Corrected bug in ELF loader which can improperly process the GOT, PLT and relocations + when multiple symbol tables exist within the ELF binary. (Issue #52)
+- Multi-User:Ghidra Server. Corrected the Ghidra Server service wrapper (YAJSW) configuration for + Mac OS X to prevent a startup timeout condition which could occur.
+- Processors. Added ARM/Thumb SRS instruction decodes for undefined modes. (Issue #216)
-Bugs
+- --Bugs
-
- API. Fixed equals method on Varnode class. (Issue #97)
-- API. Fixed a bug in MaskImpl.comlementMask(). (Issue #187)
-- Basic Infrasturcture. Fixed special character handling in idaxml.py. (Issue #75)
-- Basic Infrastructure. Ghidra now forces the locale to en_US by default. Only the en_US is currently supported. - This fixes certain unexpected exceptions. (Issue #209)
-- Diff. Fixed exceptions occasionally encountered when starting a Diff session. (Issue #211)
-- Documentation. Fixed javadoc search box redirecting to broken links. (Issue #129)
-- Function Graph. Fixed Function Graph exception when generating tooltip. (Issue #65)
-- GUI. Updted window placement to keep windows on screen. (Issue #41)
-- GUI. Add/Edit References dialog now restricts users to creating refs in valid memory address spaces.
-- GUI. Fixed exception when exiting Ghidra while a table is being edited. (Issue #51)
-- GUI. Fixed some touchpad scrolling issues. (Issue #2)
-- GUI. Fixed stack trace in the Data Type Manager's tooltip generation. (Issue #133)
-- GUI. User key binding settings for the Recently Used and Define Pointer actions no longer lost after re-launching tool. (Issue #152)
-- GUI. Toolbar buttons now respond to fast clicking.
-- Importer:MachO. The MachoLoader can now find import libraries found in Universal Binary files. (Issue #136)
-- Importer:PE. The PeLoader now correctly parses the GuardCFFunctionTable when entries are more than 4 bytes each. (Issue #220)
-- Languages. Added missing PowerPC VLE conditional branch instructions: e_bdnz and e_bdz. (Issue #103)
-- Languages. Fixed instruction semantics for several instructions and added Control Flow Enforcement, NOP variants, CMP variants, UD1, and - prefixed call instructions to X86 processor specification. (Issues #22, #53, #158, #157)
-- Languages. The 68000 MOVE instruction now correctly sets the CF and VF flags. (Issue #163)
-- Languages. Added four missing MOVEM instruction variants to the 68000 processor. (Issue #219)
-- Languages. An incorrect usage of X instead of Y in indexed mode for the 6502 has been corrected.(Issue #201)
-- Languages. Added support for ARM Thumb half BL instruction on processor variants prior to v6. (Issue #39)
-- Multi-User:Ghidra Server. Removed support for native OS authentication from Ghidra Server (removed modes -a2 and -a3) - due to incompatibility with newer OS releases including Windows 10 and Windows Server 2016. Re-introduction of this will be - considered for a future release.
-- PDB. Corrected NPE error when processing PDB files. (Issues #138, #188)
-- Scripting. Fixed a bug in ImportSymbolsScript.py that prevented it from running. (Issue #170)
+- API. Fixed equals method on Varnode class. (Issue #97)
+- API. Fixed a bug in MaskImpl.comlementMask(). (Issue #187)
+- Basic Infrastructure. Fixed special character handling in idaxml.py. (Issue #75)
+- Basic Infrastructure. Ghidra now forces the locale to en_US by default. Only the en_US is currently supported. + This fixes certain unexpected exceptions. (Issue #209)
+- Diff. Fixed exceptions occasionally encountered when starting a Diff session. (Issue #211)
+- Documentation. Fixed javadoc search box redirecting to broken links. (Issue #129)
+- Function Graph. Fixed Function Graph exception when generating tooltip. (Issue #65)
+- GUI. Updated window placement to keep windows on screen. (Issue #41)
+- GUI. Add/Edit References dialog now restricts users to creating refs in valid memory address spaces.
+- GUI. Fixed exception when exiting Ghidra while a table is being edited. (Issue #51)
+- GUI. Fixed some touchpad scrolling issues. (Issue #2)
+- GUI. Fixed stack trace in the Data Type Manager's tooltip generation. (Issue #133)
+- GUI. User key binding settings for the Recently Used and Define Pointer actions no longer lost after re-launching tool. (Issue #152)
+- GUI. Toolbar buttons now respond to fast clicking.
+- Importer:MachO. The MachoLoader can now find import libraries found in Universal Binary files. (Issue #136)
+- Importer:PE. The PeLoader now correctly parses the GuardCFFunctionTable when entries are more than 4 bytes each. (Issue #220)
+- Multi-User:Ghidra Server. Removed support for native OS authentication from Ghidra Server (removed modes -a2 and -a3) + due to incompatibility with newer OS releases including Windows 10 and Windows Server 2016. Re-introduction of this will be + considered for a future release.
+- PDB. Corrected NPE error when processing PDB files. (Issues #138, #188)
+- Processors. Added missing PowerPC VLE conditional branch instructions: e_bdnz and e_bdz. (Issue #103)
+- Processors. Fixed instruction semantics for several instructions and added Control Flow Enforcement, NOP variants, CMP variants, UD1, and + prefixed call instructions to X86 processor specification. (Issues #22, #53, #158, #157)
+- Processors. The 68000 MOVE instruction now correctly sets the CF and VF flags. (Issue #163)
+- Processors. Added four missing MOVEM instruction variants to the 68000 processor. (Issue #219)
+- Processors. An incorrect usage of X instead of Y in indexed mode for the 6502 has been corrected.(Issue #201)
+- Processors. Added support for ARM Thumb half BL instruction on processor variants prior to v6. (Issue #39)
+- Scripting. Fixed a bug in ImportSymbolsScript.py that prevented it from running. (Issue #170)
-Security
+diff --git a/Ghidra/Features/Base/certification.manifest b/Ghidra/Features/Base/certification.manifest index 386226b0b2..5ce773a23f 100644 --- a/Ghidra/Features/Base/certification.manifest +++ b/Ghidra/Features/Base/certification.manifest @@ -443,6 +443,8 @@ src/main/help/help/topics/GhidraServer/GhidraServer.htm||GHIDRA||||END| src/main/help/help/topics/Glossary/glossary.htm||GHIDRA||||END| src/main/help/help/topics/Glossary/images/BigEndian.png||GHIDRA||reviewed||END| src/main/help/help/topics/Glossary/images/LittleEndian.png||GHIDRA||reviewed||END| +src/main/help/help/topics/Graph/GraphIntro.html||GHIDRA||||END| +src/main/help/help/topics/Graph/GraphServicesIntro.html||GHIDRA||||END| src/main/help/help/topics/HeadlessAnalyzer/HeadlessAnalyzer.htm||GHIDRA||||END| src/main/help/help/topics/ImporterPlugin/images/About_pdb.png||GHIDRA||reviewed||END| src/main/help/help/topics/ImporterPlugin/images/BatchImportDialog.png||GHIDRA||||END| diff --git a/Ghidra/Features/Base/src/main/help/help/TOC_Source.xml b/Ghidra/Features/Base/src/main/help/help/TOC_Source.xml index 9a27608027..803c9e2aac 100644 --- a/Ghidra/Features/Base/src/main/help/help/TOC_Source.xml +++ b/Ghidra/Features/Base/src/main/help/help/TOC_Source.xml @@ -150,7 +150,9 @@Security
-
- Basic Infrastructure. Running Ghidra in debug mode no longer opens remotely accessible ports by default. (Issue #6)
-- GUI. The Defined Strings plugin no longer renders HTML in its table. (Issue #45)
-- Project Manager. Fixed an XXE vulnerability affeting projects and many other saved components. (Issue #71)
- +- Basic Infrastructure. Running Ghidra in debug mode no longer opens remotely accessible ports by default. (Issue #6)
+- GUI. The Defined Strings plugin no longer renders HTML in its table. (Issue #45)
+- Project Manager. Fixed an XXE vulnerability affecting projects and many other saved components. (Issue #71)
- + + + diff --git a/Ghidra/Features/Base/src/main/help/help/topics/Graph/GraphIntro.html b/Ghidra/Features/Base/src/main/help/help/topics/Graph/GraphIntro.html new file mode 100644 index 0000000000..21530cd2f8 --- /dev/null +++ b/Ghidra/Features/Base/src/main/help/help/topics/Graph/GraphIntro.html @@ -0,0 +1,24 @@ + + + + + Graphing + + + + + + + +Graphing
+ +++ + + \ No newline at end of file diff --git a/Ghidra/Features/Base/src/main/help/help/topics/Graph/GraphServicesIntro.html b/Ghidra/Features/Base/src/main/help/help/topics/Graph/GraphServicesIntro.html new file mode 100644 index 0000000000..201f64dc74 --- /dev/null +++ b/Ghidra/Features/Base/src/main/help/help/topics/Graph/GraphServicesIntro.html @@ -0,0 +1,25 @@ + + + + ++ This section contains all help related to the creation and display of Graphs. Content will + appear inside of this section as plugins are added. To see the available graph features, + see the Graph menu on the toolbar. +
+Graph Services + + + + + + + +Graph Services
+ +++ + + \ No newline at end of file diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/graph/AddressBasedGraphDisplayListener.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/graph/AddressBasedGraphDisplayListener.java index f7f7185206..0e6b40ca8b 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/graph/AddressBasedGraphDisplayListener.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/graph/AddressBasedGraphDisplayListener.java @@ -120,6 +120,10 @@ public abstract class AddressBasedGraphDisplayListener return null; } String id = getVertexId(address); + if (id == null) { + return null; + } + return graphDisplay.getGraph().getVertex(id); } @@ -202,6 +206,9 @@ public abstract class AddressBasedGraphDisplayListener private void handleSymbolAddedOrRenamed(Address address, Symbol symbol) { AttributedVertex vertex = getVertex(address); + if (vertex == null) { + return; + } graphDisplay.updateVertexName(vertex, symbol.getName()); } diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/exceptionhandlers/gcc/structures/ehFrame/FdeTable.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/exceptionhandlers/gcc/structures/ehFrame/FdeTable.java index 3c47f313fe..38e41dc5c0 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/exceptionhandlers/gcc/structures/ehFrame/FdeTable.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/exceptionhandlers/gcc/structures/ehFrame/FdeTable.java @@ -147,6 +147,7 @@ public class FdeTable { // this is an indirect reference to code from the table, // so tag reference as an indirect code flow + // TODO: This should be a CODE flow, leaving as INDIRECTION until refactor prog.getReferenceManager().addMemoryReference(locComponentAddr, locAddr, RefType.INDIRECTION, SourceType.ANALYSIS, 0); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/objectiveC/ObjectiveC1_TypeEncodings.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/objectiveC/ObjectiveC1_TypeEncodings.java index d2c22d15f6..2050c079d9 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/objectiveC/ObjectiveC1_TypeEncodings.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/objectiveC/ObjectiveC1_TypeEncodings.java @@ -71,6 +71,7 @@ public final class ObjectiveC1_TypeEncodings { public final static char _C_BYCOPY = 'O'; public final static char _C_BYREF = 'R'; public final static char _C_ONEWAY = 'V'; + public final static char _C_ATOMIC = 'A'; private final static String ANONYMOUS_PREFIX = "Anonymous"; @@ -410,8 +411,13 @@ public final class ObjectiveC1_TypeEncodings { DataType dt = parseDataType(buffer); return new TypedefDataType("ONEWAY " + dt.getDisplayName(), dt); } + case _C_ATOMIC: { + buffer.deleteCharAt(0); + DataType dt = parseDataType(buffer); + return new TypedefDataType("ATOMIC " + dt.getDisplayName(), dt); + } } - throw new UnsupportedOperationException("unrecognized format type: " + buffer.charAt(0)); + throw new UnsupportedOperationException("Unsupported Objective C type encoding: " + buffer.charAt(0)); } private Union parseBitFields(StringBuffer buffer) { diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/util/pcode/PcodeFormatter.java b/Ghidra/Features/Base/src/main/java/ghidra/app/util/pcode/PcodeFormatter.java index f2470ad3fe..d5d81626c3 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/util/pcode/PcodeFormatter.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/util/pcode/PcodeFormatter.java @@ -202,8 +202,7 @@ public class PcodeFormatter { formatVarnodeTpl(program, opcode, -1, output, lineList); lineList.add(EQUALS); } - Color color = - (opcode == PcodeOp.UNIMPLEMENTED) ? Color.RED : Color.BLUE.darker(); + Color color = (opcode == PcodeOp.UNIMPLEMENTED) ? Color.RED : Color.BLUE.darker(); lineList.add(new AttributedString(PcodeOp.getMnemonic(opcode), color, metrics)); VarnodeTpl[] inputs = op.getInput(); for (int i = 0; i < inputs.length; i++) { @@ -262,7 +261,7 @@ public class PcodeFormatter { formatConstant(offset, size, lineList); } else if (space.isUniqueSpace()) { - formatUnique(offset, size, opIndex < 0, lineList); + formatUnique(offset, size, lineList); } else { formatAddress(program, space.getSpaceId(), offset, size, lineList); @@ -284,25 +283,21 @@ public class PcodeFormatter { private void formatRaw(AddressSpace space, ConstTpl offset, ConstTpl size, List+ This section contains all help related to the graph services that provide capabilities for + generated graphs, such as displaying and exporting. Content will appear inside of this ' + section as plugins are added. To see the available graph features, + see the Graph menu on the toolbar. +
+lineList) { // same format as the Varnode.toString - String str = - "(" + space.getName() + ", 0x" + Long.toHexString(offset.getReal()) + ", " + - size.getReal() + ")"; + String str = "(" + space.getName() + ", 0x" + Long.toHexString(offset.getReal()) + ", " + + size.getReal() + ")"; lineList.add(new AttributedString(str, Color.BLUE, metrics)); } - private void formatUnique(ConstTpl offset, ConstTpl size, boolean isOutput, - List lineList) { + private void formatUnique(ConstTpl offset, ConstTpl size, List lineList) { if (offset.getType() != ConstTpl.REAL) { throw new RuntimeException("Unsupported unique offset type: " + offset.getType()); } if (size.getType() != ConstTpl.REAL) { throw new RuntimeException("Unsupported unique size type: " + size.getType()); } - lineList.add(new AttributedString("$U" + Long.toHexString(offset.getReal()), localColor, - metrics)); - if (isOutput) { - formatSize(size, lineList); - } + lineList.add( + new AttributedString("$U" + Long.toHexString(offset.getReal()), localColor, metrics)); + formatSize(size, lineList); } private void formatAddress(Program program, AddressSpace addrSpace, ConstTpl offset, @@ -314,8 +309,8 @@ public class PcodeFormatter { long offsetValue = offset.getReal(); if (addrSpace == null) { lineList.add(STAR); - lineList.add(new AttributedString("0x" + Long.toHexString(offsetValue), addressColor, - metrics)); + lineList.add( + new AttributedString("0x" + Long.toHexString(offsetValue), addressColor, metrics)); if (size.getType() != ConstTpl.J_CURSPACE_SIZE) { formatSize(size, lineList); } @@ -328,7 +323,8 @@ public class PcodeFormatter { lineList.add(new AttributedString(reg.getName(), registerColor, metrics)); if (reg.getMinimumByteSize() > sizeValue) { lineList.add(COLON); - lineList.add(new AttributedString(Integer.toString(sizeValue), this.scalarColor, metrics)); + lineList.add( + new AttributedString(Integer.toString(sizeValue), this.scalarColor, metrics)); } return; } @@ -336,7 +332,7 @@ public class PcodeFormatter { lineList.add(LEFT_BRACKET); lineList.add(new AttributedString(addrSpace.getName(), Color.BLUE, metrics)); lineList.add(RIGHT_BRACKET); - + long wordOffset = offsetValue / addrSpace.getAddressableUnitSize(); long offcut = offsetValue % addrSpace.getAddressableUnitSize(); String str = "0x" + Long.toHexString(wordOffset); @@ -396,7 +392,8 @@ public class PcodeFormatter { } private boolean formatLabelInput(VarnodeTpl input0, List lineList) { - if (input0.getSpace().isConstSpace() && input0.getOffset().getType() == ConstTpl.J_RELATIVE) { + if (input0.getSpace().isConstSpace() && + input0.getOffset().getType() == ConstTpl.J_RELATIVE) { String label = "<" + input0.getOffset().getReal() + ">"; lineList.add(new AttributedString(label, Color.BLUE, metrics)); return true; diff --git a/Ghidra/Features/Base/src/main/java/ghidra/test/ToyProgramBuilder.java b/Ghidra/Features/Base/src/main/java/ghidra/test/ToyProgramBuilder.java index 83e08c570e..00ce20c00f 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/test/ToyProgramBuilder.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/test/ToyProgramBuilder.java @@ -15,14 +15,14 @@ */ package ghidra.test; +import java.util.ArrayList; +import java.util.List; + import ghidra.program.database.ProgramBuilder; import ghidra.program.model.address.*; import ghidra.program.model.listing.Program; import ghidra.program.model.mem.MemoryAccessException; -import java.util.ArrayList; -import java.util.List; - public class ToyProgramBuilder extends ProgramBuilder { private static final String TOY_LANGUAGE_ID_BE = "Toy:BE:32:builder"; @@ -106,7 +106,7 @@ public class ToyProgramBuilder extends ProgramBuilder { /** * Get address in default ram space * @param offset address offset - * @return address + * @return the address */ public Address getAddress(long offset) { return defaultSpace.getAddress(offset); diff --git a/Ghidra/Features/Base/src/main/java/ghidra/util/UndefinedFunction.java b/Ghidra/Features/Base/src/main/java/ghidra/util/UndefinedFunction.java index 6b0e593896..a262b816f2 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/util/UndefinedFunction.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/util/UndefinedFunction.java @@ -170,17 +170,23 @@ public class UndefinedFunction implements Function { while (iterator.hasNext() && !monitor.isCancelled()) { CodeBlockReference blockReference = iterator.next(); FlowType flowType = blockReference.getFlowType(); - if (flowType.isCall()) - continue; // Don't follow call edges for within-function analysis - count += 1; // Count the existence of source that is NOT a call + if (flowType.isCall()) { + continue; // Don't follow call edges for within-function analysis + } + if (flowType.isIndirect()) { + continue; // Don't follow improper use of Indirect reference + } + count += 1; // Count the existence of source that is NOT a call Address sourceAddr = blockReference.getSourceAddress(); - if (visitedAddresses.contains(sourceAddr)) - continue; // Already visited this block + if (visitedAddresses.contains(sourceAddr)) { + continue; // Already visited this block + } visitedAddresses.addRange(sourceAddr, sourceAddr); worklist.add(blockReference.getSourceBlock()); } - if (count == 0) // We found a block with no incoming edges, a likely function start + if (count == 0) { return curblock; + } } return null; } @@ -469,8 +475,9 @@ public class UndefinedFunction implements Function { @Override public void setReturnType(DataType type, SourceType source) { - if (type == DataType.DEFAULT) + if (type == DataType.DEFAULT) { return; + } throw new UnsupportedOperationException(); } diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata.hh b/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata.hh index 176b12572c..f062b47415 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata.hh +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata.hh @@ -94,6 +94,7 @@ class Funcdata { void splitUses(Varnode *vn); ///< Make all reads of the given Varnode unique Varnode *cloneVarnode(const Varnode *vn); ///< Clone a Varnode (between copies of the function) void destroyVarnode(Varnode *vn); ///< Delete the given Varnode from \b this function + void coverVarnodes(SymbolEntry *entry,vector &list); // Low level op functions void opZeroMulti(PcodeOp *op); ///< Transform trivial CPUI_MULTIEQUAL to CPUI_COPY // Low level block functions diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata_varnode.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata_varnode.cc index 7cbdb14d9b..ac8eeaac86 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata_varnode.cc +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/funcdata_varnode.cc @@ -1376,6 +1376,35 @@ Address Funcdata::findDisjointCover(Varnode *vn,int4 &sz) return addr; } +/// \brief Make sure every Varnode in the given list has a Symbol it will link to +/// +/// This is used when Varnodes overlap a locked Symbol but extend beyond it. +/// An existing Symbol is passed in with a list of possibly overextending Varnodes. +/// The list is in Address order. We check that each Varnode has a Symbol that +/// overlaps its first byte (to guarantee a link). If one doesn't exist it is created. +/// \param entry is the existing Symbol entry +/// \param list is the list of Varnodes +void Funcdata::coverVarnodes(SymbolEntry *entry,vector &list) + +{ + Scope *scope = entry->getSymbol()->getScope(); + for(int4 i=0;i getAddr() == vn->getAddr()) + continue; + Address usepoint = vn->getUsePoint(*this); + SymbolEntry *overlapEntry = scope->findContainer(vn->getAddr(), vn->getSize(), usepoint); + if (overlapEntry == (SymbolEntry *)0) { + int4 diff = (int4)(vn->getOffset() - entry->getAddr().getOffset()); + ostringstream s; + s << entry->getSymbol()->getName() << '_' << diff; + scope->addSymbol(s.str(),vn->getHigh()->getType(),vn->getAddr(),usepoint); + } + } +} + /// Search for \e addrtied Varnodes whose storage falls in the global Scope, then /// build a new global Symbol if one didn't exist before. void Funcdata::mapGlobals(void) @@ -1386,6 +1415,7 @@ void Funcdata::mapGlobals(void) Varnode *vn,*maxvn; Datatype *ct; uint4 flags; + vector uncoveredVarnodes; bool inconsistentuse = false; iter = vbank.beginLoc(); // Go through all varnodes for this space @@ -1398,10 +1428,16 @@ void Funcdata::mapGlobals(void) maxvn = vn; Address addr = vn->getAddr(); Address endaddr = addr + vn->getSize(); + uncoveredVarnodes.clear(); while(iter != enditer) { vn = *iter; if (!vn->isPersist()) break; if (vn->getAddr() < endaddr) { + // Varnodes at the same base address will get linked to the Symbol at that address + // even if the size doesn't match, but we check for internal Varnodes that + // do not have an attached Symbol as these won't get linked to anything + if (vn->getAddr() != addr && vn->getSymbolEntry() == (SymbolEntry *)0) + uncoveredVarnodes.push_back(vn); endaddr = vn->getAddr() + vn->getSize(); if (vn->getSize() > maxvn->getSize()) maxvn = vn; @@ -1429,8 +1465,11 @@ void Funcdata::mapGlobals(void) Varnode::addrtied|Varnode::persist); discover->addSymbol(symbolname,ct,addr,usepoint); } - else if ((addr.getOffset()+ct->getSize())-1 > (entry->getAddr().getOffset()+entry->getSize()) -1) + else if ((addr.getOffset()+ct->getSize())-1 > (entry->getAddr().getOffset()+entry->getSize()) -1) { inconsistentuse = true; + if (!uncoveredVarnodes.empty()) // Provide Symbols for any uncovered internal Varnodes + coverVarnodes(entry, uncoveredVarnodes); + } } if (inconsistentuse) warningHeader("Globals starting with '_' overlap smaller symbols at the same address"); diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.cc b/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.cc index 481c702c0a..64d30b516a 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.cc +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.cc @@ -1987,7 +1987,7 @@ bool SleighCompile::undefinePreprocValue(const string &nm) // Functions needed by the parser -TokenSymbol *SleighCompile::defineToken(string *name,uintb *sz) +TokenSymbol *SleighCompile::defineToken(string *name,uintb *sz,int4 endian) { uint4 size = *sz; @@ -1998,7 +1998,12 @@ TokenSymbol *SleighCompile::defineToken(string *name,uintb *sz) } else size = size/8; - Token *newtoken = new Token(*name,size,isBigEndian(),tokentable.size()); + bool isBig; + if (endian ==0) + isBig = isBigEndian(); + else + isBig = (endian > 0); + Token *newtoken = new Token(*name,size,isBig,tokentable.size()); tokentable.push_back(newtoken); delete name; TokenSymbol *res = new TokenSymbol(newtoken); diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.hh b/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.hh index 185efa346c..30a7d1c284 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.hh +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slgh_compile.hh @@ -261,7 +261,7 @@ public: bool undefinePreprocValue(const string &nm); // Parser functions - TokenSymbol *defineToken(string *name,uintb *sz); + TokenSymbol *defineToken(string *name,uintb *sz,int4 endian); void addTokenField(TokenSymbol *sym,FieldQuality *qual); bool addContextField(VarnodeSymbol *sym,FieldQuality *qual); void newSpace(SpaceQuality *qual); diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slghparse.y b/Ghidra/Features/Decompiler/src/decompile/cpp/slghparse.y index 4bcc73bf9f..c34f5a4656 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/slghparse.y +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slghparse.y @@ -181,7 +181,9 @@ aligndef: DEFINE_KEY ALIGN_KEY '=' INTEGER ';' { slgh->setAlignment(*$4); delete ; tokendef: tokenprop ';' {} ; -tokenprop: DEFINE_KEY TOKEN_KEY STRING '(' INTEGER ')' { $$ = slgh->defineToken($3,$5); } +tokenprop: DEFINE_KEY TOKEN_KEY STRING '(' INTEGER ')' { $$ = slgh->defineToken($3,$5,0); } + | DEFINE_KEY TOKEN_KEY STRING '(' INTEGER ')' ENDIAN_KEY '=' LITTLE_KEY { $$ = slgh->defineToken($3,$5,-1); } + | DEFINE_KEY TOKEN_KEY STRING '(' INTEGER ')' ENDIAN_KEY '=' BIG_KEY { $$ = slgh->defineToken($3,$5,1); } | tokenprop fielddef { $$ = $1; slgh->addTokenField($1,$2); } | DEFINE_KEY TOKEN_KEY anysymbol { string errmsg=$3->getName()+": redefined as a token"; yyerror(errmsg.c_str()); YYERROR; } ; diff --git a/Ghidra/Features/Decompiler/src/decompile/cpp/slghscan.l b/Ghidra/Features/Decompiler/src/decompile/cpp/slghscan.l index 0675c29872..0115555194 100644 --- a/Ghidra/Features/Decompiler/src/decompile/cpp/slghscan.l +++ b/Ghidra/Features/Decompiler/src/decompile/cpp/slghscan.l @@ -494,7 +494,7 @@ int4 scan_number(char *numtext,YYSTYPE *lval,bool signednum) [(),\-] { yylval.ch = yytext[0]; return yytext[0]; } \: { BEGIN(print); slgh->calcContextLayout(); yylval.ch = yytext[0]; return yytext[0]; } \{ { BEGIN(sem); yylval.ch = yytext[0]; return yytext[0]; } -#.*$ +#.* [\r\ \t\v]+ \n { slgh->nextLine(); } macro { BEGIN(macroblock); return MACRO_KEY; } @@ -540,7 +540,7 @@ with { BEGIN(pattern); withsection = 1; slgh->calcContextLayout(); return WITH values { return VALUES_KEY; } variables { return VARIABLES_KEY; } pcodeop { return PCODEOP_KEY; } - #.*$ + #.* [a-zA-Z_.][a-zA-Z0-9_.]* { return find_symbol(); } [0-9]|[1-9][0-9]+ { return scan_number(yytext,&yylval,false); } 0x[0-9a-fA-F]+ { return scan_number(yytext,&yylval,false); } @@ -582,7 +582,7 @@ with { BEGIN(pattern); withsection = 1; slgh->calcContextLayout(); return WITH \| { yylval.ch = yytext[0]; return (actionon==0) ? yytext[0] : OP_OR; } \^ { return OP_XOR; } [=(),:;+\-*/~<>] { yylval.ch = yytext[0]; return yytext[0]; } - #.*$ + #.* [a-zA-Z_.][a-zA-Z0-9_.]* { return find_symbol(); } [0-9]|[1-9][0-9]+ { return scan_number(yytext,&yylval,true); } 0x[0-9a-fA-F]+ { return scan_number(yytext,&yylval,true); } @@ -648,7 +648,7 @@ with { BEGIN(pattern); withsection = 1; slgh->calcContextLayout(); return WITH build { return BUILD_KEY; } local { return LOCAL_KEY; } [=(),:\[\];!&|^+\-*/%~<>] { yylval.ch = yytext[0]; return yytext[0]; } - #.*$ + #.* [a-zA-Z_.][a-zA-Z0-9_.]* { return find_symbol(); } [0-9]|[1-9][0-9]+ { return scan_number(yytext,&yylval,false); } 0x[0-9a-fA-F]+ { return scan_number(yytext,&yylval,false); } diff --git a/Ghidra/Features/Decompiler/src/main/doc/sleigh.xml b/Ghidra/Features/Decompiler/src/main/doc/sleigh.xml index c6b1b624c2..c60683a52f 100644 --- a/Ghidra/Features/Decompiler/src/main/doc/sleigh.xml +++ b/Ghidra/Features/Decompiler/src/main/doc/sleigh.xml @@ -4,7 +4,7 @@ SLEIGH A Language for Rapid Processor Specification Originally published December 16, 2005 -Last updated September 5, 2019 +Last updated October 28, 2020 @@ -573,13 +573,14 @@ define endian=little; This defines how the processor interprets contiguous sequences of -bytes as integers. It effects how integer fields within an instruction -are interpreted (see ), and -it also effects the details of how the processor is supposed to -implement atomic operations like integer addition and integer -compare. The specification designer should only need to worry about -these details when labeling instruction fields, otherwise the -specification language will hide endianess issues. +bytes as integers or other values and globally affects values across +all address spaces. It also affects how integer fields +within an instruction are interpreted, (see ), +although it is possible to override this setting in the rare case that endianess is +different for data versus instruction encoding. +The specification designer generally only needs to worry about +endianess when labeling instruction fields and when defining overlapping registers, +otherwise the specification language hides endianess issues. @@ -966,7 +967,7 @@ individual constructor (defined in@@ -1057,8 +1058,22 @@ there are one or more field declarations specifying the name of the field and the range of bits within the token making up the field. The size of a field does not need to be a multiple of 8. The range is inclusive where the least significant bit in the token -is labeled 0. The endianess of the processor will effect this labeling -when defining tokens that are bigger than 1 byte. After each field +is labeled 0. When defining tokens that are bigger than 1 byte, the +global endianess setting (See) +will affect this labeling. Although it is rarely required, it is possible to override +the global endianess setting for a specific token by appending either the qualifier + endian=little orendian=big +immediately after the token name and size. For instance: ++ +The token+ define token instr ( 32 ) endian=little op0=(0,15) +... +instr is overridden to be little endian. +This override applies to all fields defined for the token but affects no other tokens. + ++After each field declaration, there can be zero or more of the following attribute keywords: @@ -2023,7 +2038,7 @@ assignment to such a variable changes the context in which the current instruction is being disassembled and can potentially have a drastic effect on how the rest of the instruction is disassembled. An assignment of this form is considered local to the instruction and -will not effect how other instructions are parsed. The context +will not affect how other instructions are parsed. The context variable is reset to its original value before parsing other instructions. The disassembly action may also contain one or more globalset directives, which @@ -2547,7 +2562,7 @@ the table symbolmode . When this constructor is matched, as part of a more complicated instruction, the symbolmode will represent the original semantic value ofreg but with the standard post-increment -side effect. +side-effect.The table symbol associated with the constructor becomes @@ -3724,7 +3739,7 @@ blr is opcode=35 & reg=15 & LRset=1 { return [lr]; } An alternative to the noflow attribute is to simply issue multiple directives within a single constructor, so an explicit end to a context change can be given. The value of the variable exported to the global state -is the one in affect at the point where the directive is issued. Thus, +is the one in effect at the point where the directive is issued. Thus, after oneglobalset , the same context variable can be assigned a different value, followed by anotherglobalset for a different @@ -3735,7 +3750,7 @@ Because context in SLEIGH is controlled by a disassembly process, there are some basic caveats to the use of theglobalset directive. Withflowing context changes, -there is no guarantee of what global state will be in affect at a +there is no guarantee of what global state will be in effect at a particular address. During disassembly, at any given point, the process may not have uncovered all the relevant directives, and the known directives may not necessarily be consistent. In diff --git a/Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileCallback.java b/Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileCallback.java index 1140ca057f..f044d942af 100644 --- a/Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileCallback.java +++ b/Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompileCallback.java @@ -526,6 +526,9 @@ public class DecompileCallback { private Namespace getNameSpaceByID(long id) { Symbol namespaceSym = program.getSymbolTable().getSymbol(id); + if (namespaceSym == null) { + return null; + } Object namespace = namespaceSym.getObject(); if (namespace instanceof Namespace) { return (Namespace) namespace; diff --git a/Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/ASTGraphTask.java b/Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/ASTGraphTask.java index 2ed6c445fe..f034c1faeb 100644 --- a/Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/ASTGraphTask.java +++ b/Ghidra/Features/Decompiler/src/main/java/ghidra/app/plugin/core/decompile/actions/ASTGraphTask.java @@ -123,13 +123,7 @@ public class ASTGraphTask extends Task { graphType == GraphType.DATA_FLOW_GRAPH ? "AST Data Flow" : "AST Control Flow"; description = description + " for " + hfunction.getFunction().getName(); display.setGraph(graph, description, false, monitor); - // set the graph location - if (location != null) { - AttributedVertex vertex = displayListener.getVertex(location); - // update graph location, but don't have it send out event - display.setFocusedVertex(vertex, EventTrigger.INTERNAL_ONLY); - } - + setGraphLocation(display, displayListener); } catch (GraphException e) { Msg.showError(this, null, "Graph Error", e.getMessage()); @@ -140,6 +134,20 @@ public class ASTGraphTask extends Task { } + private void setGraphLocation(GraphDisplay display, ASTGraphDisplayListener displayListener) { + if (location == null) { + return; + } + + AttributedVertex vertex = displayListener.getVertex(location); + if (vertex == null) { + return; // location not in graph + } + + // update graph location, but don't have it send out event + display.setFocusedVertex(vertex, EventTrigger.INTERNAL_ONLY); + } + protected void createDataFlowGraph(AttributedGraph graph, TaskMonitor monitor) throws CancelledException { IteratoropIter = hfunction.getPcodeOps(); diff --git a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGActionManager.java b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGActionManager.java index 04a7c3c209..f6b77414f3 100644 --- a/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGActionManager.java +++ b/Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGActionManager.java @@ -1091,8 +1091,9 @@ class FGActionManager { AddressSet subtraction = provider.getCurrentProgramSelection().subtract(functionBody); ProgramSelection programSelectionWithoutGraphBody = new ProgramSelection(subtraction); - plugin.getTool().firePluginEvent(new ProgramSelectionPluginEvent("Spoof!", - programSelectionWithoutGraphBody, provider.getCurrentProgram())); + plugin.getTool() + .firePluginEvent(new ProgramSelectionPluginEvent("Spoof!", + programSelectionWithoutGraphBody, provider.getCurrentProgram())); } private Set getAllVertices() { @@ -1161,8 +1162,10 @@ class FGActionManager { private void makeSelectionFromAddresses(AddressSet addresses) { ProgramSelection selection = new ProgramSelection(addresses); - plugin.getTool().firePluginEvent( - new ProgramSelectionPluginEvent("Spoof!", selection, provider.getCurrentProgram())); + plugin.getTool() + .firePluginEvent( + new ProgramSelectionPluginEvent("Spoof!", selection, + provider.getCurrentProgram())); } private void ungroupVertices(Set groupVertices) { diff --git a/Ghidra/Features/GraphServices/Module.manifest b/Ghidra/Features/GraphServices/Module.manifest index 798f8869d0..148da2a754 100644 --- a/Ghidra/Features/GraphServices/Module.manifest +++ b/Ghidra/Features/GraphServices/Module.manifest @@ -1,7 +1,7 @@ EXCLUDE FROM GHIDRA JAR: true -MODULE FILE LICENSE: lib/jungrapht-visualization-1.0-RC9.jar BSD -MODULE FILE LICENSE: lib/jungrapht-layout-1.0-RC9.jar BSD +MODULE FILE LICENSE: lib/jungrapht-visualization-1.0.jar BSD +MODULE FILE LICENSE: lib/jungrapht-layout-1.0.jar BSD MODULE FILE LICENSE: lib/jgrapht-core-1.5.0.jar LGPL 2.1 MODULE FILE LICENSE: lib/jgrapht-io-1.5.0.jar LGPL 2.1 MODULE FILE LICENSE: lib/jheaps-0.13.jar Apache License 2.0 diff --git a/Ghidra/Features/GraphServices/build.gradle b/Ghidra/Features/GraphServices/build.gradle index dac83a1fa8..2d64dfaa12 100644 --- a/Ghidra/Features/GraphServices/build.gradle +++ b/Ghidra/Features/GraphServices/build.gradle @@ -11,10 +11,8 @@ eclipse.project.name = 'Features Graph Services' dependencies { compile project(":Base") -// compile "com.github.tomnelson:jungrapht-visualization:1.0-SNAPSHOT" -// compile "com.github.tomnelson:jungrapht-layout:1.0-SNAPSHOT" - compile "com.github.tomnelson:jungrapht-visualization:1.0-RC9" - compile "com.github.tomnelson:jungrapht-layout:1.0-RC9" + compile "com.github.tomnelson:jungrapht-visualization:1.0" + compile "com.github.tomnelson:jungrapht-layout:1.0" compile "org.jgrapht:jgrapht-core:1.5.0" // not using jgrapht-io code that depends on antlr, so exclude antlr diff --git a/Ghidra/Features/GraphServices/src/main/help/help/TOC_Source.xml b/Ghidra/Features/GraphServices/src/main/help/help/TOC_Source.xml index 372d07792a..4bc4df43ef 100644 --- a/Ghidra/Features/GraphServices/src/main/help/help/TOC_Source.xml +++ b/Ghidra/Features/GraphServices/src/main/help/help/TOC_Source.xml @@ -50,11 +50,9 @@ - diff --git a/Ghidra/Features/GraphServices/src/main/help/help/topics/GraphServices/GraphDisplay.htm b/Ghidra/Features/GraphServices/src/main/help/help/topics/GraphServices/GraphDisplay.htm index 651c7b122c..ea093ef790 100644 --- a/Ghidra/Features/GraphServices/src/main/help/help/topics/GraphServices/GraphDisplay.htm +++ b/Ghidra/Features/GraphServices/src/main/help/help/topics/GraphServices/GraphDisplay.htm @@ -5,103 +5,245 @@ -- - +- - + + Graphing +Graph Display - + + +Default Graph Display
-Visualization of a Graph
---The visualization display will show the graph in a new window or in a new tab of a previously created graph window.
------
Manipulating the Graph:
--
-- MouseButton1+drag will translate the display in the x and y axis
-- Mouse Wheel will zoom in and out
-- CTRL+Mouse Wheel will zoom in and out in the X-Axis only
-- ALT+Mouse Wheel will zoom in and out in the Y-Axis only
-- Ctrl+MouseButton1 will select a vertex or edge
--
-- Shift+Ctrl+MouseButton1 over an unselected vertex will add that vertex to the selection
-- Shift+Ctrl+MouseButton1 over a previously selected vertex will remove that vertex from the selection
-- Ctrl+MouseButton1+drag on an empty area will create a rectangular area and select enclosed vertices
-- Ctrl+MouseButton1+drag over a vertex will reposition all selected vertices
-Toolbar Buttons
-The
-toggle button, when 'set' will cause a focused vertex (red arrow) to be scrolled to the center of the view
The
-toggle button, when 'set' will allow the user to draw a free-form shape that encloses the vertices they wish to select.
The
-toggle button, when 'set' will open a satellite mini view of the graph in the lower right corner. The mini-view can be manipulated with the mouse to affect the main view
The
-button will reset any visual transformations on the graph and center it at a best-effort size
The
-toggle button, when 'set' will open a rectangular magnification lens in the graph view
- ---
-- MouseButton1 click-drag on the lens center circle to move the magnifier lens
-- MouseButton1 click-draw on a lens edge diamond to resize the magnifier lens
-- MouseButton1 click on the upper-right circle-cross to dispose of the magnifier lens
-- MouseWheel will change the magnification of the lens
-The
button will open a Filter dialog. Select buttons in the dialog to hide specific vertices or edges in the display. - The Filter dialog buttons are created by examining the graph vertex/edge properties to discover candidates for filtering.
The
-Arrangement menu is used to select one of several graph layout algorithms.
+-+The visualization display will show the graph in a new window or in a new tab of a + previously created graph window.
--
-- Compact Hierarchical is the TidierTree Layout Algorithm. It builds a tree structure and attempts to reduce horizontal space.
-- Hierarchical is a basic Tree algorithm. It prioritizes 'important' edges while constructing the tree.
-- Compact Radial is the TidierTree Layout Algorithm with the root(s) at the center and child vertices radiating outwards.
-- Hierarchical MinCross is the Sugiyama Layout Algorithm. It attempts to route edges around vertices in order to reduce crossing.There are four layering algorithms:
--
- -- Top Down - biases the vertices to the top
-- Longest Path - biases the vertices to the bottom
-- Network Simplex - layers after finding an 'optimal tree'
-- Coffman Graham - biases the vertices using a scheduling algorithm to minimize length
-- Circle will arrange vertices in a Circle. If there are not too many edges (less than specified in the jungrapht.circle.reduceEdgeCrossingMaxEdges property with a default of 200), it will attempt to reduce edge crossing by rearranging the vertices.
-- Force Balanced is a Force Directed Layout Algorithm using the the Kamada Kawai approach. It attempts to balance the graph by considering vertices and edge connections.
-- Force Directed is a Force Directed Layout Algorithm using the Fructermann Reingold approach. It pushes unconnected vertices apart and draws connected vertices together.
-- Radial is a Tree structure with the root(s) at the center and child vertices radiating outwards.
-- Balloon is a Tree structure with the root(s) at the centers of circles in a radial pattern
-- GEM is a Force Directed layout with locally separated components
-Popup Actions
--+ +Standard Popup Actions
--
-- Hide Selected - Causes the display to not show selected vertices.
-- Hide Unselected - Causes the display to not show unselected vertices.
-- Invert Selection - Unselects all selected nodes and selects all unselected nodes.
-- Grow Selection From Sources - Adds to the selection all vertices that have outgoing edges to the current selection.
-- Grow Selection To Targets - Adds to the selection all vertices that have incoming edges from the current selection.
-- Display Selected As New Graph - Creates a new graph and display from the currently selected vertices.
-Vertex Popup Actions
--
- -- Select Vertex - Selects the vertex that this action was invoked on.
-- Deselect Vertex - Deselects the vertex that this action was invoked on.
-Edge Popup Actions
--
+- Go To Edge Source - Makes this edge's source vertex be the focused vertex.
-- Go To Edge Target - Makes this edge's destination vertex be the focused vertex.
-- Select Edge - Add this edge and its associated vertices to the selection
-- Deselect Edge - Removes this edge and its associated vertices from the selection
-+ +
++ ++ Manipulating the Graph
+ ++
+ +- Dragging in the graph or on any unselected vertices will pan the graph (translate the + display in the x and y axis)
+ +- Dragging a selected vertex will reposition all selected vertices
+ +- Using the
+ +Mouse Wheel
will zoom the graph in and out- + +
Control+Mouse Wheel
will zoom the graph in and out on the X-Axis only- + +
ALT+Mouse Wheel
will zoom the graph in and out in the Y-Axis only- + +
Ctrl+Click
will select a vertex ++
+- + +
Ctrl+Click
over an unselected vertex will add that vertex to the + selection- +
Ctrl+Click
over a previously selected vertex will remove that vertex + from the selection- + + +
Ctrl+drag
on an empty area will create a rectangular area and select + enclosed verticesToolbar Buttons
+ + + + + + + + + ++ The
+ +toggle button, when 'set' will open a rectangular + magnification lens in the graph view
++ + + ++++
+- MouseButton1 click-drag on the lens center circle to move the magnifier lens
+ +- MouseButton1 click-draw on a lens edge diamond to resize the magnifier lens
+ +- MouseButton1 click on the upper-right circle-cross to dispose of the magnifier + lens
+ +- MouseWheel will change the magnification of the lens
++ The
+ +Arrangement menu is used to + select one of several graph layout algorithms.
++ ++++
+- + Compact Hierarchical is the TidierTree Layout Algorithm. It builds a tree + structure and attempts to reduce horizontal space.
+ +- + Hierarchical is a basic Tree algorithm. It prioritizes 'important' edges while + constructing the tree.
+ +- + Compact Radial is the TidierTree Layout Algorithm with the root(s) at the + center and child vertices radiating outwards.
+ +- Hierarchical MinCross is the Sugiyama Layout Algorithm. It attempts to + route edges around vertices in order to reduce crossing.There are four layering + algorithms:
+ +- + +
+ +- + Circle will arrange vertices in a Circle. If there are not too many edges (less + than specified in the jungrapht.circle.reduceEdgeCrossingMaxEdges property with a default + of 200), it will attempt to reduce edge crossing by rearranging the vertices.
+ +- + Force Balanced is a Force Directed Layout Algorithm using the the Kamada + Kawai approach. It attempts to balance the graph by considering vertices and edge + connections.
+ +- + Force Directed is a Force Directed Layout Algorithm using the + Fructermann Reingold approach. It pushes unconnected vertices apart and draws + connected vertices together.
+ +- + Radial is a Tree structure with the root(s) at the center and child vertices + radiating outwards.
+ +- + Balloon is a Tree structure with the root(s) at the centers of circles in a radial + pattern
+ +- + GEM is a Force Directed layout with locally separated components
+Popup Actions
+ +++ +Standard Popup Actions
+ ++
+ +- + Hide Selected - Causes the display to not show selected vertices.
+ +- + Hide Unselected - Causes the display to not show unselected vertices.
+ +- + Invert Selection - Unselects all selected nodes and selects all unselected + nodes.
+ +- + Grow Selection From Sources - Adds to the selection all vertices that have outgoing + edges to the current selection.
+ +- + Grow Selection To Targets - Adds to the selection all vertices that have incoming + edges from the current selection.
+ +- + Clear Selection - Clears all edge and vertex selection.
+ +- + Display Selected As New Graph - Creates a new graph and display from the currently + selected vertices.
+ +- + Display Popup Windows - When toggled off no tooltip popups will be displayed.
+ +Vertex Popup Actions
+ ++
+ +- + Select Vertex - Selects the vertex that this action was invoked on.
+ +- + Deselect Vertex - Deselects the vertex that this action was invoked on.
+Edge Popup Actions
+ ++
+- + Go To Edge Source - Makes this edge's source vertex be the focused vertex.
+ +- + Go To Edge Target - Makes this edge's destination vertex be the focused vertex.
+ +- + Select Edge - Add this edge and its associated vertices to the selection
+ +- + Deselect Edge - Removes this edge and its associated vertices from the + selection
+Provided By: GraphDisplayBrokerPlugin
+ + + ++
- Graph Export
+
+
-