While I was messing with gdbinit three weeks ago, I added a small feature that displays the messages being sent to objc_msgSend. Usually I follow the otool or IDA dump and see what’s being sent, but that it’s not very practical! So I made a dirty hack with gdbinit so that information appears automatically into GDB window. It’s not very pretty, but gdbinit is very limited 😦.
Example:
gdb$
0x00002bc5 in main ()
--------------------------------------------------------------------------[regs]
EAX: 9FF43924 EBX: 00002B9D ECX: 9FF37B64 EDX: 00403250 o d I t S z a P c
ESI: BFFFF8F4 EDI: BFFFF898 EBP: BFFFF838 ESP: BFFFF7F0 EIP: 00002BC5
CS: 0017 DS: 001F ES: 001F FS: 0000 GS: 0037 SS: 001F
[001F:BFFFF7F0]----------------------------------------------------------[stack]
BFFFF840 : 01 00 00 00 98 F8 FF BF - A0 F8 FF BF F4 F8 FF BF ................
BFFFF830 : A0 F8 FF BF F4 F8 FF BF - 78 F8 FF BF 92 23 00 00 ........x....#..
BFFFF820 : 2C 0C 05 90 C2 6D E0 8F - 00 00 00 00 A0 F8 FF BF ,....m..........
BFFFF810 : 24 F8 FF BF 00 10 00 00 - 38 F8 FF BF D0 C5 E4 8F $.......8.......
BFFFF800 : E4 F1 E3 8F DA 29 00 00 - 38 F8 FF BF FE 29 00 00 .....)..8....)..
BFFFF7F0 : 80 5E A7 A0 10 3B F4 9F - F0 2E 40 00 00 00 00 00 .^...;....@.....
--------------------------------------------------------------------[ObjectiveC]
0x9ff43924 <objc_msgSend_stub+548>: "init"
[0017:00002BC5]-----------------------------------------------------------[code]
0x2bc5 : mov DWORD PTR [esp+0x4],eax
0x2bc9 : mov DWORD PTR [esp],edx
0x2bcc : call 0x404c <dyld_stub_objc_msgSend>;
0x2bd1 : mov DWORD PTR [ebp-0x14],eax
0x2bd4 : lea eax,[ebx+0x24cb]
0x2bda : mov eax,DWORD PTR [eax]
0x2bdc : mov edx,eax
0x2bde : lea eax,[ebx+0x249b]
--------------------------------------------------------------------------------
After the call to _objc_msgSend, that display will be removed until the next time such argument is found. There will be false positives, since I’m grabbing the mov to esp+0x4 (maybe this can be avoided, but for me it’s not a big deal and I can live with it).
Grab it here, version 7.1.1: gdbinit
Any comments, suggestions, patches & improvements are welcome !