Editing the Eulemur personality per the instructions
here worked!
Below I outline the steps I took to replace the Eulemer personality with the Vervet personality modified to only use three connectors.
I used ati_personality.pl.0.7 (from the above link) to read all the personalities. I'm only interested in the two working personalities, Vervet and Eulemer. For 32-bit:
$ perl ati-personality.pl -a
...
Kext ATI5000Controller
...
Personality: Vervet
ConnectorInfo count in decimal: 4
Disk offset in decimal 488552
0000000 00 04 00 00 00 04 00 00 00 71 00 00 12 04 04 02
0000010 04 00 00 00 14 00 00 00 00 71 00 00 01 12 01 04
0000020 00 02 00 00 14 00 00 00 00 71 00 00 00 00 06 03
0000030 00 08 00 00 00 02 00 00 00 71 00 00 22 05 05 01
0000040
...
Personality: Eulemur
ConnectorInfo count in decimal: 3
Disk offset in decimal 488664
0000000 04 00 00 00 14 00 00 00 00 01 00 00 01 02 01 04
0000010 00 08 00 00 00 02 00 00 00 71 00 00 12 04 04 02
0000020 10 00 00 00 10 00 00 00 00 00 00 00 00 10 00 01
0000030
...
For 64-bit:
$ perl ati-personality.pl -x
...
Kext ATI5000Controller
...
Personality: Vervet
ConnectorInfo count in decimal: 4
Disk offset in decimal 167264
0000000 00 04 00 00 00 04 00 00 00 71 00 00 12 04 04 02
...
Personality: Eulemur
ConnectorInfo count in decimal: 3
Disk offset in decimal 167376
...
The only difference between the 32 and 64 bit output is the disk offset for each, I will use both later.
To fix my problem, I extracted the Vervet personality first. It has 4 connectors, so we dump 4*16=64 bytes. Its offset it 488552 from above.
$ cp -r /System/Library/Extensions/ATI5000Controller.kext ./
$ dd if=ATI5000Controller.kext/Contents/MacOS/ATI5000Controller of=Vervet.orig bs=1 skip=488552 count=64
Then I converted it to hex
$ xxd < Vervet.orig > Vervet.orig.hex
$ cat Vervet.orig.hex
0000000: 0004 0000 0004 0000 0071 0000 1204 0402 .........q......
0000010: 0400 0000 1400 0000 0071 0000 0112 0104 .........q......
0000020: 0002 0000 1400 0000 0071 0000 0000 0603 .........q......
0000030: 0008 0000 0002 0000 0071 0000 2205 0501 .........q.."...
Now I edit the hex file with a text editor, delete the second line (for the unnecessary 0x200 DVI connector), and modify the new second line's first string appropriately (0000030->0000020). I save the new file as Eulemer.new.hex
$ cat Eulemur.new.hex
0000000: 0004 0000 0004 0000 0071 0000 1204 0402 .........q......
0000010: 0400 0000 1400 0000 0071 0000 0112 0104 .........q......
0000020: 0008 0000 0002 0000 0071 0000 2205 0501 .........q.."...
I convert back to binary and write the new Eulemer profile into the kext. I write the same data to two addresses. From the ati_personality.pl.0.7 output above, the Eulemer personality has a disk offset of 488664 (32-bit) and 167376 (64-bit). It has only 3 connectors, so we write 3*16=48 bytes.
$ xxd -r < Eulemur.new.hex > Eulemur.new
$ dd if=Eulemur.new of=ATI5000Controller.kext/Contents/MacOS/ATI5000Controller bs=1 count=48 seek=488664 conv=notrunc
$ dd if=Eulemur.new of=ATI5000Controller.kext/Contents/MacOS/ATI5000Controller bs=1 count=48 seek=167376 conv=notrunc
Now all that's left is to backup the original ATI5000Controller.kext, replace it with the new one, rebuild caches, and reboot. Voila, no more ghost display.
Tell me if this helps or if I've got any typos here.