I have just released an update to libess. What is libess? Its a C++ library that reads an ess file and stores all the information in a bunch of classes so you can do stuff with that information.
The download is here
http://www.cncmods.net/files/libess.zip
Its purpose is to provide a way to read and parse the oblivion ess files in exactly the same way the game code does. Its purpose is also to provide a better reference for the format of the ess files than either the Wyre Bash source code (which doesn't parse most of the files and doesn't do a good job of it) or the wiki http://www.uesp.net/wiki/Tes4Mod:Save_File_Format which is full of errors and un-decoded information.
As of right now it decodes the structure of (and most of the data types of) everything in the ess file (a few data types are guessed and might be e.g. long vs ulong vs float vs whatever) except for:
1.Mod file records stored under createdData in the save file (the format is documented on the wiki, I just need to actually implement it all)
2.CELL change records (I have most of that record decoded in cellchangerecord.h but I am still stuck dealing with the SeenData subrecord (the information on the wiki is not good enough for this)
3.REFR change records (I have most of that record decoded too, need to turn my notes into actual C++ code as well as figure out the data for the Tresspass property (0x20), parts of the data for the NonActorMagicTarget property (0x3A), the Conversation property (0x59) and parts of the Movement Extra property (0x4B).
and 4.Those parts of the ACHR and ACRE change records that are extra on top of the REFR change record (yes I can confirm that ACHR and ACRE records are derivatives of the REFR change record)
Its licensed under the GNU GPL which basically means if you want to use my code in your app, you can do it as long as you make the source code for your app available.
Anyone with questions about libess or the ess file format, feel free to ask here and I will do my best to answer them.
The only notable change since 1.0 is that it now supports saving as well as loading. So you could read in your save file, change various values and write it back out easily.
Coming up next I plan to continue reverse engineering the change record code and hopefully add support for REFR, ACHR and ACRE change records. Also I plan to write some code to read and parse the esm/esp files.