mirror of
https://github.com/darlinghq/class-dump.git
synced 2024-11-27 06:10:25 +00:00
Generate Objective-C headers from Mach-O files.
class-dump.pbproj | ||
new/oform | ||
Nextstep | ||
Openstep | ||
Rhapsody | ||
class-dump.h | ||
class-dump.m | ||
datatypes.h | ||
datatypes.m | ||
gram.y | ||
h.template | ||
lexer.c | ||
m.template | ||
MappedFile.h | ||
MappedFile.m | ||
my_regex.c | ||
my_regex.h | ||
ObjcCategory.h | ||
ObjcCategory.m | ||
ObjcClass.h | ||
ObjcClass.m | ||
ObjcIvar.h | ||
ObjcIvar.m | ||
ObjcMethod.h | ||
ObjcMethod.m | ||
ObjcProtocol.h | ||
ObjcProtocol.m | ||
ObjcThing.h | ||
ObjcThing.m | ||
README |
class-dump is a utility for examining the Objective-C segment of Mach-O files. It generates the @interface and @protocol declarations for classes, categories and protocols. Version 2 is a re-implementation of Eric P. Scott's class-dump, and works with the frameworks in Openstep 4.x. The class-dump version 2.1.5 package includes source that should compile on Mac OS X, Mac OS X Server, Openstep, and Nextstep 3.3 with Foundation. This package includes the binary compiled for Mac OS X: class-dump-2.1.5-bs.tar.gz (Mac OS X) Most of the changes since version 2.1.2 have been fixes for Mac OS X, so I haven't updated the Mac OS X Server, Openstep and Nextstep packages: class-dump-2.1.2-PI-bs.tar.gz (Mac OS X Server) class-dump.2.1.2.m.NIS.bs.tar.gz (Openstep) class-dump.2.1.2.NIHS.bs.tar.gz (Nextstep) These are all available from by website at: http://www.omnigroup.com/~nygard/Projects/index.html Differences between 2.1.5 and 2.1.4 - Compiled on Mac OS X. The release notes say "Do Not Use Pre-GM Compilers to Build Software for Mac OS X", so I've recompiled this. - No changes other than the version number and README. Differences between 2.1.4 and 2.1.3 - Carl Lindberg made some changes that make class-dump work better on Mac OS X Public Beta: - It's a little better about backward compatibility with old frameworks that still work on Public Beta. - It fixes most of the syntax errors we were getting when parsing types. (We were having trouble with union types.) - It now understands framework install names and the framework search path, so you should be able to run it on apps or frameworks where the install name of the frameworks is not where the framework exists in the filesystem. The Omni frameworks, for example, change the install name. - It will search for an app executable in the Contents/MacOS directory of the app wrapper that Mac OS X uses if you just use the path to the main app wrapper. - You can set the ClassDumpDebugFrameworkPaths environment variable to see the steps it's going through to find the frameworks. It spits out a lot of stuff, but it may be useful for someone. With zsh, you can do this: ClassDumpDebugFrameworkPaths=YES class-dump /System/Applications/MailViewer.app Differences between 2.1.3 and 2.1.2 - James McIlree made these changes to get class-dump running on Mac OS X DP4: - The OS X mach-o files keep some information in the __TEXT __cstring section. I've made a small set of tweeks to cause class-dump to look in the correct segment and section. - The build on OS X defines NS_TARGET_MAJOR as 5, this needs to be set in order to get the new code. Differences between 2.1.2 and 2.1.1 - Tom Hageman has provided the changes to make it work with object files and bundles. In the previous version, the output was empty. - It shouldn't crash if there are fewer types than it expects while formatting a method. This is most likely triggered by incompatible current versions of frameworks. Differences between 2.1.1 and 2.1.0 - Compiles under Rhapsody, Openstep and Foundation based Nextstep 3.3. Tom Hageman provided the changes to get it working with Nextstep 3.3 and compiled it quad-fat. - Under Rhapsody, the -C option now takes egrep style regular expressions to match categories and protocols. It will still work as before with text strings, but you can, for example, specify -C 'View|Window' to match classes with both strings. Differences between 2.1.0 and 2.0 - The -a option has been split into -a, which just shows instance variable offsets, and -A, which shows method addresses. (Suggested by Charles Lloyd.) - Protocol definitions are all printed at the beginning of the output for each file. Duplicate protocol definitions are no longer shown. - New option, -S, to sort the output. Protocols are sorted by name. Classes and categories are sorted by name. Class and instance methods are each sorted by name. (Suggested by Charles Lloyd.) - When the -S option is not used, the method definitions are printed out reversed from the order they are found in the Mach-O file. This should reflect the order they are declared in the original source file. - The effect of the -C option has changed. It now matches category and protocol names instead of just class names. (Carl Lindberg pointed out that categories should also be matched.) - Corrected output when the target file doesn't have an Objective-C segment. - An 'id *' type should now be printed correctly. - Fixed printing of pointers to arrays. - Fixed printing of multi-dimensional arrays. - Made #ifdefs of LC_PREBOUND_DYLIB and LC_LOAD_DYLIB independant for compiling under 3.3 (Suggested by Carl Lindberg.) - This now uses the Foundation framework, so it may not work with Nextstep 3.x. - flex is no longer required. - The version number of class-dump is now included in the output. Visible differences between version 2 and version 1 - class-dump works with framework based files (the whole point of this exercise!) - The class declaration shows the adopted protocols. - Protocol definitions are shown before (rather than after) the class declaration. - New option, -r, to recursively expand frameworks and fixed VM shared libraries. - A comment is generated to show the file where the classes are defined. This is helpful when using the -r option. - New option, -s, to use "char *" instead of "STR". Known problems - The Nexttime bundles under 4.1 seem to have invalid pointers for some of the method names (they point into the __meth_var_types section instead of the __meth_var_names section) and therefore generate errors. This may be caused from being compiled against a different "current version" of a framework than what is available on the current system. For example: 4.1 Nexttime bundles: compatibility version 129.0.0, current version 153.0.0 4.1 Foundation framework: compatibility version 129.0.0, current version 154.0.0 This also shows up in the AppleMenuOptions.app under Rhapsody DR2. - A couple old applications have type strings that the parser can't handle. Compiling Mac OS X This should build directly from Project Builder. There are a couple of harmless warnings. Openstep, Nextstep Bison is required to compile this. There should be no warnings. To compile first copy the PB.project and Makefiles from one of the Nextstep or Openstep directories into the main source directory and then build it. Comments and suggestions are welcomed. Steve Nygard <nygard@omnigroup.com>