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

编译器/解释器

开发平台:

C/C++

  1. The RDOFF version 1.1 Object File Format
  2. ========================================
  3. I seem to keep writing this document... I don't know what keeps
  4. happening to it. Anyway, this one will hopefully stay around for a
  5. while.
  6. RDOFF is a relocatable object file format whose design goals were
  7. mainly to keep it simple, so that an RDOFF object can be loaded and
  8. executed by a very small piece of code (primarily so that it can be
  9. used by the microkernel of an operating system to store system
  10. modules, which can then go on to load and execute more complex object
  11. files, eg ELF, if so desired), yet still be able to be cope with
  12. everything required by the operating system; linkage of multiple
  13. modules together (possibly with automatic loading of new libraries
  14. that are referred to by the object) at load time, allowing static or
  15. dynamic linking as required by the application.
  16. The overall format of the file is summarised in this table:
  17. Length (bytes) Description
  18.       6 Contains the string 'RDOFF1' (little-endian targets),
  19. or 'RDOFF' followed by the single byte 0x01
  20. (big-endian targets).
  21.       4 Length of the header section
  22.       ? Header section (see above for length)
  23.       4 Length of code section (.text)
  24.       ? Code section
  25.       4 Length of data section (.data)
  26.       ? Data section
  27. Segments are referred to as numbers. Imported labels are implicitly
  28. at offset zero from a segment; each is assigned a segment number when
  29. it is imported. Segments in the object file itself are numbered:
  30. 0 - text segemnt
  31. 1 - data segment
  32. 2 - bss segment
  33. The header consists of a sequence of records, each of which is
  34. preceded by a byte to represent its type.
  35. These records are one of the following types:
  36. 1: Relocation Record
  37. --------------------
  38. This record points to an address that will need either
  39. relocation or linkage to an external segment when the object
  40. is loaded or linked.
  41. Length Description
  42.   1 Type identifier (must be 1)
  43.   1 Segment number (0 or 1) plus 64 if the reference is
  44. relative (and thus does not require relocation with
  45. the base of the code, only by the difference between
  46. the start of this segment, and the segment referred to
  47. (see below)
  48.   4 Offset from start of segment of item requiring reloc.
  49.   1 Length of item (1, 2, or 4 bytes...)
  50.   2 Segment number to which reference is made.
  51. 2: Import Symbol Record
  52. -----------------------
  53. This record defines a segment to start at the location of a
  54. named symbol; this symbol may need to be fetched from an
  55. external library.
  56. Length Description
  57.   1 Type identifier (must be 2)
  58.   2 Segment number to allocate
  59.   ? String containing label (null terminated, max length =
  60. 32 chars)
  61. 3: Export Symbol Record
  62. -----------------------
  63. This record defines a symbol, to which external modules can
  64. link using the above record type.
  65. Length Description
  66.   1 Type identifier (must be 3)
  67.   1 Segment containing symbol (0,1 or 2)
  68.   4 Offset of symbol within segment
  69.   ? String containing label (null terminated, max length =
  70. 32 chars)
  71. 4: Import Library Record
  72. ------------------------
  73. This record tells the loader that an extra library should be
  74. loaded and linked to the module at either load- or run-time
  75. (load time is easier, run-time is good, though...)
  76. Length Description
  77.   1 Type identifier (must be 4)
  78.   ? Name of library (null terminated string, max len = 128)
  79. 5: Reserve BSS Bytes
  80. --------------------
  81. This record tells the loader how much memory to reserve after
  82. the executable code loaded from the object file for the BSS
  83. segment (referred to as segment number 2).
  84. A loader can safely assume that there will only be one of
  85. these records per module, but the linker probably cannot...
  86. NASM will only output one, but other utilities may be written
  87. that do, and future versions of NASM may output more than one.
  88. Length Description
  89.   1 Type identifier (must be 5)
  90.   4 Number of bytes to reserve