3
3
#include " time.h"
4
4
5
5
6
- #define COFF_F (COFF_F_RELFLG | COFF_F_EXEC)
6
+ #define COFF_F (COFF_F_RELFLG | /* COFF_F_LNNO | COFF_F_LSYMS | */ COFF_F_EXEC)
7
7
8
8
typedef struct coffh
9
9
{
@@ -15,17 +15,42 @@ coffh;
15
15
16
16
coffh TabCoffHdr = {
17
17
{
18
+ // magic number
18
19
0x1 , 0x50 ,
20
+ // number of sections
19
21
0x0 , 0x03 ,
22
+ // time & date stamp
20
23
0x0 , 0x0 , 0x0 , 0x0 ,
24
+ // file pointer to symtab
21
25
0x0 , 0x0 , 0x0 , 0x0 ,
26
+ // number of symtab entries
22
27
0x0 , 0x0 , 0x0 , 0x0 ,
28
+ // sizeof (optional hdr)
23
29
((COFF_AOUTSZ & 0xff00 ) >> 8 ), (COFF_AOUTSZ & 0xff ),
30
+ // flags
24
31
((COFF_F & 0xff00 ) >> 8 ), (COFF_F & 0xff )
25
32
},
26
33
{
27
- ((COFF_ZMAGIC & 0xff00 ) >> 8 ), (COFF_ZMAGIC & 0xff ), // magic number
28
- 0x1 , 0x07 , // version stamp
34
+ // magic number / type of file
35
+ #if 0
36
+ ((COFF_ZMAGIC & 0xff00) >> 8), (COFF_ZMAGIC & 0xff),
37
+ #else
38
+ 0x0 , 0x0 ,
39
+ #endif
40
+ // version stamp
41
+ 0x1 , 0x07 ,
42
+ // text size in bytes
43
+ 0x0 , 0x0 , 0x0 , 0x0 ,
44
+ // data size in bytes
45
+ 0x0 , 0x0 , 0x0 , 0x0 ,
46
+ // bss size in bytes
47
+ 0x0 , 0x0 , 0x0 , 0x0 ,
48
+ // entry pt.
49
+ 0x0 , 0x0 , 0x0 , 0x0 ,
50
+ //
51
+ 0x0 , 0x0 , 0x0 , 0x0 ,
52
+ //
53
+ 0x0 , 0x0 , 0x0 , 0x0
29
54
},
30
55
{
31
56
// .text
@@ -91,14 +116,21 @@ int create_coff(void)
91
116
// create the coff file
92
117
if (!fopen_s (&file2, buffer, " wb" ) && file2)
93
118
{
119
+ #if 0
94
120
// set time creation
95
121
time_t TimeStamp, Time;
96
122
Time = time(&TimeStamp);
97
123
*(uint32_t*)TabCoffHdr.fhdr.f_timdat = !endianess ? SWAP32(Time) : Time;
124
+ #endif
98
125
// header initialisations
99
126
*(uint32_t *)TabCoffHdr.ahdr .tsize = !endianess ? SWAP32 (linj) : linj;
100
127
*(uint32_t *)TabCoffHdr.ahdr .text_start = !endianess ? SWAP32 (runadr) : runadr;
101
128
*(uint32_t *)TabCoffHdr.ahdr .entry = !endianess ? SWAP32 (loadadr) : loadadr;
129
+ // text header initialisations
130
+ *(uint32_t *)TabCoffHdr.shdr [0 ].s_paddr = !endianess ? SWAP32 (loadadr) : loadadr;
131
+ *(uint32_t *)TabCoffHdr.shdr [0 ].s_vaddr = !endianess ? SWAP32 (loadadr) : loadadr;
132
+ *(uint32_t *)TabCoffHdr.shdr [0 ].s_size = !endianess ? SWAP32 (linj) : linj;
133
+ *(uint32_t *)TabCoffHdr.shdr [0 ].s_scnptr = !endianess ? SWAP32 (sizeof (TabCoffHdr)) : sizeof (TabCoffHdr);
102
134
// write file and "optional" headers
103
135
fwrite (&TabCoffHdr, sizeof (TabCoffHdr), 1 , file2);
104
136
// Dump the file
0 commit comments