Greetings. I have been working the past few weeks on a replacement for DwarfManager. Not that DM isn't awesome, but I really wanted to try adding some new features myself. And I figured C++ would be a better platform for eventually getting this working on OSX and Linux. So I went with C++ and Qt for the platform. The source is open, and I hope some enterprising Linux/OSX hacker can help me with getting those versions working in the future.
I'd be more than happy to help with this. I've gotten DwarfManager to ready in dwarf data from a running DF instance on Linux. It's mostly a matter of grabbing /proc/pid/maps and /proc/pid/mem, and then deciphering the gcc binary layout. In fact, using C++ may make things easier, since theoretically the internals would be the same for both processes.
The problem is going to be writing back changes to the process. MSVC takes a rather handy shortcut when it allocates std:string objects -- if the string is < 16 characters long, it's stored inline in a fixed char[16] following the length bytes. That apparently includes an uninitialized std:string. Meaning, you can write back up to 16 characters into a dwarf data blob's custom name/labor values, even if there wasn't originally one set, and it just works.
gcc doesn't do that -- all std:string data is a pointer to another char[], and if the string is empty, there's no memory allocated for it. And trying to get another process to allocate memory for you is just insane, assuming it even works.
At a miniumu, it should be possible to edit everything except the custom profession names; you'd have to set those in DF first, or at least set them to *something*. I've been doing all this in Mono but the IDE debugger stopped working on me so I've been stuck for a few months. I'll switch over to C++ and see if I have any better luck there.
(I'd suggest asking for a proper dorfAPI but I doubt it would even make it onto Toady's radar...)
--Mike