title: What do the .eh_frame and .eh_frame_hdr sections store, exactly?
body: <p>I know that, when using languages that support exceptions, such as C++, additional information must be provided to the runtime environment to describe the call frames that must be unwound during the processing of an exception. This information is contained in special sections of the object files, such as <code>.eh_frame</code> and <code>.eh_frame_hdr</code>.</p>
  
  <p>But, what kind of data structures are stored in these sections? I mean, can they be read by using any C struct? Do they have anything to do with the <code>.cfi</code> statements (such as <code>.cfi_startproc</code>, <code>.cfi_endproc</code>, <code>.cfi_offset</code>, <code>.cfi_def_cfa_offset</code>, <code>.cfi_personality</code> and <code>.cfi_lsda</code>) in GNU assembly code? If they do, what each one of these clauses cause in those sections? What does the <code>.eh_frame_hdr</code> section have to do with the <code>.eh_frame</code> one?</p>
  
  <p>I would appreciate explanations using C structs as much as possible. Thank you.</p>