1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
Classy!
IDA script for keeping track of RE info related to C++ classes (specifically,
CodeWarrior PPC) and keeping things consistent throughout the database.
That's what makes IDA better than objdump anyway, right? :p
Started by Treeki: 16th October 2011
Developed using Python 2.6 and IDA 6.1.
Supported so far:
- Save and reset database
- Classes:
- Create a class using an IDA struct
- Delete a class
- Base classes are handled using a struct field named _
- Struct is automatically created if one is not chosen - if this is used,
Classy adds the _ field for you
- Virtual Tables:
- Set a VTable for a class. End is automatically detected
- If the auto detection fails (pure virtuals, for example) you can
manually override it
- CTors/DTors:
- Set a ctor and dtor for a class (TODO: Multiple ctors)
- Dtors automatically become virtual if a pointer to them is found in the
vtable, even if the dtor was registered before the vtable was set
- Methods:
- Register regular and virtual methods
- Mark virtual calls by highlighting the "lwz r12, ..." line, pressing
Shift+C and choosing a class
- Xrefs to each virtual method are shown at the top of the method body
- Set method arguments including pointers, arrays, refs and consts
- Arguments are automatically mangled so they are shown in IDA names
- Shift+V automatically detects whether a method is a new virtual one or
an override
- Overrides are shown at the top of the original method body
- Renames and argument list changes are propagated from original methods
to overrides (Though not vice versa yet)
That's all for now, I think...
Current Todo:
- Only show classes that fit the criteria in the chooser for Shift+C
- Support PTMFs, too
- Automatically create virtual methods using the vtable.
- Named arguments to methods
- Return types for methods
- Const methods
- Improve vtable end detection heuristics
- Support pure virtuals.
- Handle IDA chooser history/defaults correctly everywhere
- Better keybindings
- Rename class menu item
- Netnodes
- Override dtors
- Sanity check to see if a virtual method might exist in a base class
- Confirm unlinking of methods
- Don't let you create more than one method with the same name
- choose_class differentiation between "no class" and Cancel
- Auto usage of struct if a named one exists
- Remove virtual xrefs
Caveats:
- Multiple inheritance will not be supported in the near future.
- Probably won't work as well with non-CodeWarrior stuff.
Notes:
- When autocreating virtual methods, start with the base class!!
Otherwise, you might end up defining an override as a virtual
method. And that would be bad.
|