rdf.doc
上传用户:yuppie_zhu
上传日期:2007-01-08
资源大小:535k
文件大小:4k
源码类别:

编译器/解释器

开发平台:

C/C++

  1. RDOFF: Relocatable Dynamically-linked Object File Format
  2. ========================================================
  3. RDOFF was designed initially to test the object-file production
  4. interface to NASM. It soon became apparent that it could be enhanced
  5. for use in serious applications due to its simplicity; code to load
  6. and execute an RDOFF object module is very simple. It also contains
  7. enhancements to allow it to be linked with a dynamic link library at
  8. either run- or load- time, depending on how complex you wish to make
  9. your loader.
  10. The RDOFF format (version 1.1, as produced by NASM v0.91) is defined
  11. as follows:
  12. The first six bytes of the file contain the string 'RDOFF1'. Other
  13. versions of the format may contain other last characters other than
  14. '1' - all little endian versions of the file will always contain an
  15. ASCII character with value greater than 32. If RDOFF is used on a
  16. big-endian machine at some point in the future, the version will be
  17. encoded in decimal rather than ASCII, so will be below 32.
  18. All multi-byte fields follwing this are encoded in either little- or
  19. big-endian format depending on the system described by this version
  20. information. Object files should be encoded in the endianness of
  21. their target machine; files of incorrect endianness will be rejected
  22. by the loader - this means that loaders do not need to convert
  23. endianness, as RDOFF has been designed with simplicity of loading at
  24. the forefront of the design requirements.
  25. The next 4 byte field is the length of the header in bytes. The
  26. header consists of a sequence of variable length records. Each
  27. record's type is identified by the first byte of the record. Record
  28. types 1-4 are currently supported. Record type 5 will be added in
  29. the near future, when I implement BSS segments. Record type 6 may be
  30. to do with debugging, when I get debugging implemented.
  31. Type 1: Relocation
  32. ==================
  33. Offset  Length  Description
  34. 0       1       Type (contains 1)
  35. 1       1       Segment that contains reference (0 = text, 1 = data)
  36.                 Add 64 to this number to indicate a relative linkage
  37.                 to an external symbol (see notes)
  38. 2       4       Offset of reference
  39. 6       1       Length of reference (1,2 or 4 bytes)
  40. 7       2       Segment to which reference is made (0 = text, 1 =
  41.                 data, 2 = BSS [when implemented]) others are external
  42.                 symbols.
  43. Total length = 9 bytes
  44. Type 2: Symbol Import
  45. =====================
  46. 0       1       Type (2)
  47. 1       2       Segment number that will be used in references to this
  48.                 symbol.
  49. 3       ?       Null terminated string containing label (up to 32
  50.                 chars) to match against exports in linkage.
  51. Type 3: Symbol Export
  52. =====================
  53. 0       1       Type (3)
  54. 1       1       Segment containing object to be exported (0/1/2)
  55. 2       4       Offset within segment
  56. 6       ?       Null terminate string containing label to export (32
  57.                 char maximum length)
  58. Type 4: Dynamic Link Library
  59. ============================
  60. 0       1       Type (4)
  61. 1       ?       Library name (up to 128 chars)
  62. Type 5: Reserve BSS
  63. ===================
  64. 0       1       Type (5)
  65. 1       4       Amount of BSS space to reserve in bytes
  66. Total length: 5 bytes
  67. -----------------------------------------------------------------------------
  68. Following the header is the text (code) segment. This is preceded by
  69. a 4-byte integer, which is its length in bytes. This is followed by
  70. the length of the data segment (also 4 bytes), and finally the data
  71. segment.
  72. Notes
  73. =====
  74. Relative linking: The number stored at the address is offset
  75. required from the imported symbol, with the address of the end of
  76. the instruction subtracted from it. This means that the linker can
  77. simply add the address of the label relative to the beginning of the
  78. current segment to it.