mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-07-30 07:18:37 -09:00
95 lines
3.0 KiB
Plaintext
95 lines
3.0 KiB
Plaintext
PURPOSE
|
|
|
|
This is a readme file to note the changes made to the binutils-2.24 source
|
|
code in order for Ghidra to build its GNU demangler.
|
|
|
|
|
|
|
|
|
|
COPIED SOURCE CODE / BUILDING RESTRICTIONS
|
|
|
|
Most of the files used to build the Ghidra GNU demangler are copied from binutils and have
|
|
not been changed. Further, the files in this directory are a small subset of the files used to
|
|
build the binutils suite. By copying specific files we are able to use Make and Visual Studio
|
|
to build a stand alone demangler without having to perform the more complicated build needed
|
|
to build binutils. Specifically, we do not have to run the configure utility that is
|
|
provided by binutils. This is critical, as we are using Visual Studio to build on Windows,
|
|
which does not have the configure utility support. If we ever wished to build the entire
|
|
binutils suite on Windows, then we would most likely need to use a GNU environment made for
|
|
Windows, such as MinGW.
|
|
|
|
|
|
|
|
|
|
CHANGES TO BINUTILS SOURCE
|
|
|
|
cplus-dem.c
|
|
|
|
To this file was added about 400 lines of source code. Previously, this file contained a
|
|
main method that we used to build our stand alone demangler. The current version of
|
|
binutils does not have this main method. Instead, binutils has only a main method in
|
|
cp-demangle.c for building the stand alone demangler. The c++filt utility is created using
|
|
a main method inside of cxxfilt.c. We could not build that utility without using the
|
|
more complicated build system mentioned above.
|
|
|
|
In order to gain full functionality contained in the c++filt utility, we copied the main
|
|
method from cxxfilt.c and placed it, along with supporting methods, into cplus-dem.c. This
|
|
allows us to perform a simple build of the stand alone demangler, with less source files
|
|
required.
|
|
|
|
cp-demangle.c *
|
|
|
|
This file contains a small, two-line change to send a newline character ('\n') along with
|
|
a flush to the output stream. Without this change, the program, when called repeatedly from
|
|
Ghidra would eventually hang. This is due to the nature of how Ghidra reads results in a
|
|
line-oriented fashion.
|
|
|
|
*This change is no longer used, as we do not use the main method inside of this file, but have
|
|
switched to the main method we made and placed into cplus-dem.c.
|
|
|
|
|
|
|
|
|
|
UPDATING
|
|
|
|
If we ever wish to update to a newer version of binutils, then we will need to re-copy the files
|
|
in this directory and then rebuild the main method we created inside of cplus-dem.c. That is,
|
|
unless at least one of the following changes happens:
|
|
|
|
1) the stand alone demangler in cp-demangle has full c++filt support, or
|
|
2) binutils has put the main method back inside cplus-dem.c, or
|
|
3) building a stand alone c++filt is simple enough that we can do it on each platform, or
|
|
4) we decide to build the entire binutils suite and use the full c++filt binary.
|
|
|
|
|
|
|
|
|
|
SOURCE FILES NEEDED BY OS
|
|
|
|
|
|
*nix / Mac
|
|
|
|
ansidecl.h
|
|
argv.c
|
|
cp-demangle.c
|
|
cp-demangle.h
|
|
cplus-dem.c
|
|
demangle.h
|
|
dyn-string.c
|
|
dyn-string.h
|
|
getopt.c
|
|
getopt.h
|
|
libiberty.h
|
|
safe-ctype.c
|
|
safe-ctype.h
|
|
xexit.c
|
|
xstrdup.c
|
|
|
|
WINDOWS
|
|
|
|
|
|
|
|
alloca.c
|
|
getopt1.c
|
|
|