選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

efiprefix.S 5.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. .text
  2. .code32
  3. .arch i386
  4. .section ".prefix", "a", @progbits
  5. .org 0x00
  6. /* DOS (.com) header
  7. *
  8. * EFI executables seem to leave most of this empty
  9. */
  10. mzhdr:
  11. .ascii "MZ" /* Magic number */
  12. .word 0 /* Bytes on last page of file */
  13. .word 0 /* Pages in file */
  14. .word 0 /* Relocations */
  15. .word 0 /* Size of header in paragraphs */
  16. .word 0 /* Minimum extra paragraphs needed */
  17. .word 0 /* Maximum extra paragraphs needed */
  18. .word 0 /* Initial (relative) SS value */
  19. .word 0 /* Initial SP value */
  20. .word 0 /* "Checksum" */
  21. .word 0 /* Initial IP value */
  22. .word 0 /* Initial (relative) CS value */
  23. .word 0 /* File address of relocation table */
  24. .word 0 /* Ovesrlay number */
  25. .word 0, 0, 0, 0 /* Reserved words */
  26. .word 0 /* OEM identifier (for e_oeminfo) */
  27. .word 0 /* OEM information; e_oemid specific */
  28. .word 0, 0, 0, 0, 0 /* Reserved words */
  29. .word 0, 0, 0, 0, 0 /* Reserved words */
  30. .long pehdr_lma /* File address of new exe header */
  31. .size mzhdr, . - mzhdr
  32. /* PE header */
  33. .org 0xc0 /* For compatibility with MS toolchain */
  34. pehdr:
  35. .ascii "PE\0\0" /* Magic number */
  36. .word 0x014c /* CPU architecture: i386 */
  37. .word num_pe_sections /* Number of sections */
  38. .long 0x10d1a884 /* Timestamp */
  39. .long 0 /* Symbol table */
  40. .long 0 /* Number of symbols */
  41. .word opthdr_size /* Size of optional header */
  42. .word 0x2102 /* Characteristics */
  43. .size pehdr, . - pehdr
  44. .equ pehdr_lma, pehdr - mzhdr
  45. /* "Optional" header */
  46. opthdr:
  47. .word 0x010b /* Magic number */
  48. .byte 0 /* Linker major version number */
  49. .byte 0 /* Linker minor version number */
  50. .long _text_filesz /* Size of text section */
  51. .long _data_filesz /* Size of data section */
  52. .long _bss_filesz /* Size of bss section */
  53. .long efi_entry_lma /* Entry point */
  54. .long _text_lma /* Text section start RVA */
  55. .long _data_lma /* Data section start RVA */
  56. .long 0 /* Image base address */
  57. .long _max_align /* Section alignment */
  58. .long _max_align /* File alignment */
  59. .word 0 /* Operating system major version number */
  60. .word 0 /* Operating system minor version number */
  61. .word 0 /* Image major version number */
  62. .word 0 /* Image minor version number */
  63. .word 0 /* Subsystem major version number */
  64. .word 0 /* Subsystem minor version number */
  65. .long 0 /* Reserved */
  66. .long _filesz /* Total image size */
  67. .long _prefix_filesz /* Total header size */
  68. .long 0 /* "Checksum" */
  69. .word 0x0a /* Subsystem: EFI */
  70. .word 0 /* DLL characteristics */
  71. .long 0 /* Size of stack reserve */
  72. .long 0 /* Size of stack commit */
  73. .long 0 /* Size of heap reserve */
  74. .long 0 /* Size of heap commit */
  75. .long 0 /* Loader flags */
  76. .long 16 /* Number of data directory entries */
  77. .long 0, 0 /* Export directory */
  78. .long 0, 0 /* Import directory */
  79. .long 0, 0 /* Resource directory */
  80. .long 0, 0 /* Exception directory */
  81. .long 0, 0 /* Security directory */
  82. .long _reloc_lma, _reloc_filesz /* Base relocation directory */
  83. .long debugdir_lma, debugdir_size /* Debug directory */
  84. .long 0, 0 /* Description directory */
  85. .long 0, 0 /* Special directory */
  86. .long 0, 0 /* Thread storage directory */
  87. .long 0, 0 /* Load configuration directory */
  88. .long 0, 0 /* Bound import directory */
  89. .long 0, 0 /* Import address table directory */
  90. .long 0, 0 /* Delay import directory */
  91. .long 0, 0 /* Reserved */
  92. .long 0, 0 /* Reserved */
  93. .size opthdr, . - opthdr
  94. .equ opthdr_size, . - opthdr
  95. /* PE sections */
  96. pe_sections:
  97. text_section:
  98. .asciz ".text" /* Section name */
  99. .align 8
  100. .long _text_filesz /* Section size */
  101. .long _text_lma /* Relative Virtual Address */
  102. .long _text_filesz /* Section size (rounded up) */
  103. .long _text_lma /* Pointer to raw data */
  104. .long 0 /* Link-time relocations */
  105. .long 0 /* Line numbers */
  106. .word 0 /* Number of link-time relocations */
  107. .word 0 /* Number of line numbers */
  108. .long 0x68000020 /* Characteristics */
  109. rodata_section:
  110. .asciz ".rodata" /* Section name */
  111. .align 8
  112. .long _rodata_filesz /* Section size */
  113. .long _rodata_lma /* Relative Virtual Address */
  114. .long _rodata_filesz /* Section size (rounded up) */
  115. .long _rodata_lma /* Pointer to raw data */
  116. .long 0 /* Link-time relocations */
  117. .long 0 /* Line numbers */
  118. .word 0 /* Number of link-time relocations */
  119. .word 0 /* Number of line numbers */
  120. .long 0x48000040 /* Characteristics */
  121. data_section:
  122. .asciz ".data" /* Section name */
  123. .align 8
  124. .long _data_filesz /* Section size */
  125. .long _data_lma /* Relative Virtual Address */
  126. .long _data_filesz /* Section size (rounded up) */
  127. .long _data_lma /* Pointer to raw data */
  128. .long 0 /* Link-time relocations */
  129. .long 0 /* Line numbers */
  130. .word 0 /* Number of link-time relocations */
  131. .word 0 /* Number of line numbers */
  132. .long 0xc8000040 /* Characteristics */
  133. reloc_section:
  134. .asciz ".reloc" /* Section name */
  135. .align 8
  136. .long _reloc_filesz /* Section size */
  137. .long _reloc_lma /* Relative Virtual Address */
  138. .long _reloc_filesz /* Section size (rounded up) */
  139. .long _reloc_lma /* Pointer to raw data */
  140. .long 0 /* Link-time relocations */
  141. .long 0 /* Line numbers */
  142. .word 0 /* Number of link-time relocations */
  143. .word 0 /* Number of line numbers */
  144. .long 0x42000040 /* Characteristics */
  145. pe_sections_end:
  146. .size pe_sections, . - pe_sections
  147. .equ num_pe_sections, ( ( . - pe_sections ) / 0x28 )
  148. /* Debug directory */
  149. .section ".rodata"
  150. .globl debugdir
  151. debugdir:
  152. .long 0 /* Characteristics */
  153. .long 0x10d1a884 /* Timestamp */
  154. .word 0 /* Major version */
  155. .word 0 /* Minor version */
  156. .long 0x02 /* RSDS? */
  157. .long codeview_rsds_size /* Size of data */
  158. .long codeview_rsds_lma /* RVA */
  159. .long codeview_rsds_lma /* File offset */
  160. .size debugdir, . - debugdir
  161. .equ debugdir_size, . - debugdir
  162. /* Codeview structure */
  163. .globl codeview_rsds
  164. codeview_rsds:
  165. .ascii "RSDS" /* Magic number */
  166. .long 0, 0, 0, 0, 0 /* Unused by EFI */
  167. .asciz "efiprefix.pdb"
  168. .size codeview_rsds, . - codeview_rsds
  169. .equ codeview_rsds_size, . - codeview_rsds