SRAM. (can also be other formats like EEPROM and Flash depending upon the game/system, hence some preferring terms like save games and game saves but I will ignore that for now)
Usually a condensed version of what is in the game as decided upon by the devs. Some things may be lacking (I am sure we have all had games fill health after loading, or lose pickups upon loading...). Said SRAM saves will tend also to have some kind of check done on them to see if they have been changed or developed an error.
Some emulator developers add their own header or footer to a save, or compress them beyond what might have been done by the devs. Typically this is done so you might be able to figure out what it is for -- if you have a file called 01.sav then you might have no idea what game it is for, the original dev would not have cared to add any indicators as the save is only going to be on your local copy of the game. Said header or footer can trouble some things (flash carts, some other emulators and such) and extra compression almost certainly will. To write an emulator you have to be a fairly competent coder and such people will know this, as such may provide some support but don't count on it.
Some save dumpers like those from Datel/gameshark/action replay/codebreakers/.... have been known to encrypt them as well, mostly this is when they sell access to a service but not always. Said people will also often have a header/footer added, and as these are the things you will typically get from gamefaqs (indeed they have or maybe had a rule about getting things from emulators).
Savestates
A copy of the contents of memory (give or take the parts of the memory dealing with the ROM itself), registers, CPU state and so forth. Or if you prefer you save the entire state of the machine being emulated/simulated/whatever. Any checks here are the same ones that will trouble cheats as they are operating on the same thing really.
Savestate formats have no defined format.
Most of the time emulator authors will take the contents of memory, stick it end to end, stick any registers that are not in memory in there somewhere and call it a savestate. Any variation in these (do you put the registers first and the memory second, intersperse it, this area is technically never used so is there a need to include it...) will obviously make the incompatible with each other, though trivial to convert once you have the differences.
If you have hardware derived savestates (various things have had this from the minicomputers right through to the GBA and DS) then not all memory might be accessible; there is such a thing as write only memory, and there is read only memory/registers. Sometimes these matter, often they don't or the game will autocorrect it after a glitch or two. Sometimes the hardware makers will help things along (if the random state after powering on risks a crash then send a working value in there however you will).
I have seen savestates, and individual sections thereof, be compressed in the past. Sections of SRAM game saves being compressed, especially on epic RPGs with characters with 50 stats, permanent changes to the world and so on, is not unheard of either.
That probably covers your later questions but taking them anyway
ROM file.
This is what the game ultimately runs from (barring some technicalities with network loaded code and stuff like the DS sticking the binary in RAM). It is able to do the most profound changes, compared to savestates which are whatever is loaded into memory or you can maybe trick it into loading next.
SRAM is what the devs of the game chose to save for the player to continue with when they next play. Editing these tends to focus on that, though I should say it was a popular means of running exploits at one point in time (most systems today block it fairly well, and by the time you usefully could run an exploit from one then you have an exploited machine in the first place).
Some will edit savestates because of the lack of protection in them compared to SRAM game saves, and ease of figuring out what is there. If you can make a cheat then you can edit savestates fairly happily, to edit most game saves you will want to either edit the ROM (I can see someone maybe making a cheat to defeat a save check but it would be rare) to ignore the check or figure out how the check is done and make a tool to recalculate the check result.
ROM and SRAM have no simple bearing on each other as far as offsets (offset being the location of something in a file). Technically you could analyse the ROM such that you know how it uses the save format but that is an awful lot of quite hard work.
Savestates, as mentioned before, are a copy of the contents of memory. I don't think generalisations are terribly useful here
I have seen plenty of games just copy a chunk of memory (or several chunks) directly into the save, hash it and call it a day.
I have equally seen plenty of games take an aspect of memory, do some crazy maths on it, stick it in a save, do the same for a bunch of other aspects, hash that and carry on with life.
I have seen games recalculate stats after load -- if you gain one health per level and you are level 50 then no need to store the health value if you have the level one. On the other hand the game may not want to do that every time so your savestate editing may well have a means to give you a far greater max health without worrying the level value.
I have seen games use trivial saves like mentioned above but have serious anti cheat in their memory (mirror values, inverted values, alternating locations...) and vice versa games have hideous saves but simple memory.
Likewise editing a savestate (or making a cheat which is more or less the same thing) can be an easy way to edit the contents of SRAM. Say I want a save with 256 potions in it. I could figure out the save format (would take a little while but doable enough), figure out the hash format and either make a tool to do it or the steps to do it manually, fair bit of work really. Alternatively I could make a cheat (standard cheat finding thing of get say 100 potions, use one, search, do nothing in the game but use another potion, search.... eventually find the RAM location, set the value to 256 or make a cheat to do the same, load my save I want to edit, have the cheat run/edit the memory myself, save the game and have it handle all the putting it in the right place and hashes.
I am starting to waffle and what started out quite clean and concise is getting extra sections added in so I will cut it off there for now.