Rev 7597 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7597 | Rev 7696 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | (* |
1 | (* |
2 | BSD 2-Clause License |
2 | BSD 2-Clause License |
Line 3... | Line 3... | ||
3 | 3 | ||
4 | Copyright (c) 2018, 2019, Anton Krotov |
4 | Copyright (c) 2018-2019, Anton Krotov |
5 | All rights reserved. |
5 | All rights reserved. |
Line 6... | Line 6... | ||
6 | *) |
6 | *) |
Line 26... | Line 26... | ||
26 | SIZE_OF_IMAGE_SECTION_HEADER* = 40; |
26 | SIZE_OF_IMAGE_SECTION_HEADER* = 40; |
Line 27... | Line 27... | ||
27 | 27 | ||
Line 28... | Line 28... | ||
28 | (* SectionHeader.Characteristics *) |
28 | (* SectionHeader.Characteristics *) |
29 | 29 | ||
30 | SHC_text = 060000020H; |
30 | SHC_text = 060000020H; |
Line 31... | Line 31... | ||
31 | SHC_data = 0C0000040H; |
31 | SHC_data = 040000040H; |
32 | SHC_bss = 0C00000C0H; |
32 | SHC_bss = 0C0000080H; |
Line 370... | Line 370... | ||
370 | WriteWord(file, h.SizeOfOptionalHeader); |
370 | WriteWord(file, h.SizeOfOptionalHeader); |
371 | WriteWord(file, h.Characteristics) |
371 | WriteWord(file, h.Characteristics) |
372 | END WriteFileHeader; |
372 | END WriteFileHeader; |
Line 373... | Line 373... | ||
373 | 373 | ||
374 | 374 | ||
375 | PROCEDURE write* (program: BIN.PROGRAM; FileName: ARRAY OF CHAR; BaseAddress: INTEGER; console, dll, amd64: BOOLEAN); |
375 | PROCEDURE write* (program: BIN.PROGRAM; FileName: ARRAY OF CHAR; console, dll, amd64: BOOLEAN); |
Line 376... | Line 376... | ||
376 | VAR |
376 | VAR |
Line 377... | Line 377... | ||
377 | i, n: INTEGER; |
377 | i, n: INTEGER; |
Line 378... | Line 378... | ||
378 | 378 | ||
Line -... | Line 379... | ||
- | 379 | Size: RECORD |
|
- | 380 | ||
379 | Size: RECORD |
381 | Code, Data, Bss, Stack, Import, Reloc, Export: INTEGER |
Line 380... | Line 382... | ||
380 | 382 | ||
Line 381... | Line 383... | ||
381 | Code, Data, Bss, Stack, Import, Reloc, Export: INTEGER |
383 | END; |
Line 502... | Line 504... | ||
502 | Size.Code := CHL.Length(program.code); |
504 | Size.Code := CHL.Length(program.code); |
503 | Size.Data := CHL.Length(program.data); |
505 | Size.Data := CHL.Length(program.data); |
504 | Size.Bss := program.bss; |
506 | Size.Bss := program.bss; |
505 | Size.Stack := program.stack; |
507 | Size.Stack := program.stack; |
Line -... | Line 508... | ||
- | 508 | ||
- | 509 | IF dll THEN |
|
- | 510 | BaseAddress := 10000000H |
|
- | 511 | ELSE |
|
- | 512 | BaseAddress := 400000H |
|
- | 513 | END; |
|
506 | 514 | ||
507 | PEHeader.Signature[0] := 50H; |
515 | PEHeader.Signature[0] := 50H; |
508 | PEHeader.Signature[1] := 45H; |
516 | PEHeader.Signature[1] := 45H; |
509 | PEHeader.Signature[2] := 0; |
517 | PEHeader.Signature[2] := 0; |
Line 554... | Line 562... | ||
554 | PEHeader.OptionalHeader.LoaderFlags := 0; |
562 | PEHeader.OptionalHeader.LoaderFlags := 0; |
555 | PEHeader.OptionalHeader.NumberOfRvaAndSizes := IMAGE_NUMBEROF_DIRECTORY_ENTRIES; |
563 | PEHeader.OptionalHeader.NumberOfRvaAndSizes := IMAGE_NUMBEROF_DIRECTORY_ENTRIES; |
Line 556... | Line 564... | ||
556 | 564 | ||
557 | InitSection(SectionHeaders[0], ".text", SHC_text); |
565 | InitSection(SectionHeaders[0], ".text", SHC_text); |
558 | SectionHeaders[0].VirtualSize := Size.Code; |
566 | SectionHeaders[0].VirtualSize := Size.Code; |
559 | SectionHeaders[0].VirtualAddress := 1000H; |
567 | SectionHeaders[0].VirtualAddress := SectionAlignment; |
560 | SectionHeaders[0].SizeOfRawData := align(Size.Code, FileAlignment); |
568 | SectionHeaders[0].SizeOfRawData := align(Size.Code, FileAlignment); |
Line 561... | Line 569... | ||
561 | SectionHeaders[0].PointerToRawData := PEHeader.OptionalHeader.SizeOfHeaders; |
569 | SectionHeaders[0].PointerToRawData := PEHeader.OptionalHeader.SizeOfHeaders; |
562 | 570 |