добавлен параметр -fa <size> (выравнивание секций PE)

This commit is contained in:
AntKrotov committed 2023-02-04 19:33:12 +03:00
1 parent 7a04b38ecd
commit 38b630e2d4
12 files changed
+25 -11

No files matched your search

BIN
View File
Binary file not shown.
+1 -1
View File
@@ -1,2 +1,2 @@
Compiler.exe source\Compiler.ob07 win32con -out bin\Compiler32.exe -stk 2 Compiler.exe source\Compiler.ob07 win32con -out bin\Compiler32.exe -stk 2 -fa 512
@pause @pause
+1 -1
View File
@@ -1,2 +1,2 @@
Compiler.exe source\Compiler.ob07 win64con -out bin\Compiler.exe -stk 2 Compiler.exe source\Compiler.ob07 win64con -out bin\Compiler.exe -stk 2 -fa 512
@pause @pause
BIN
View File
Binary file not shown.
+2
View File
@@ -34,6 +34,8 @@ UTF-8 с BOM-сигнатурой.
-def <имя> задать символ условной компиляции -def <имя> задать символ условной компиляции
-ver <major.minor> версия программы (только для kosdll) -ver <major.minor> версия программы (только для kosdll)
-uses вывести список импортированных модулей -uses вывести список импортированных модулей
-fa <size> выравнивание секций файла PE32 в байтах, возможные значения:
512, 1024, 2048, 4096. По умолчанию - 512
параметр -nochk задается в виде строки из символов: параметр -nochk задается в виде строки из символов:
"p" - указатели "p" - указатели
+2
View File
@@ -31,6 +31,8 @@ UTF-8 с BOM-сигнатурой.
идентификаторов идентификаторов
-def <имя> задать символ условной компиляции -def <имя> задать символ условной компиляции
-uses вывести список импортированных модулей -uses вывести список импортированных модулей
-fa <size> выравнивание секций файла PE32 в байтах, возможные значения:
512, 1024, 2048, 4096. По умолчанию - 512
параметр -nochk задается в виде строки из символов: параметр -nochk задается в виде строки из символов:
"p" - указатели "p" - указатели
+1 -1
View File
@@ -2414,7 +2414,7 @@ BEGIN
BIN.fixup(prog); BIN.fixup(prog);
IF TARGETS.OS = TARGETS.osWIN64 THEN IF TARGETS.OS = TARGETS.osWIN64 THEN
PE32.write(prog, outname, target = TARGETS.Win64C, target = TARGETS.Win64DLL, TRUE) PE32.write(prog, outname, target = TARGETS.Win64C, target = TARGETS.Win64DLL, TRUE, options.PE32FileAlignment)
ELSIF TARGETS.OS = TARGETS.osLINUX64 THEN ELSIF TARGETS.OS = TARGETS.osLINUX64 THEN
ELF.write(prog, outname, sofinit, target = TARGETS.Linux64SO, TRUE) ELF.write(prog, outname, sofinit, target = TARGETS.Linux64SO, TRUE)
END END
+4
View File
@@ -66,6 +66,9 @@ BEGIN
DEC(i) DEC(i)
END END
ELSIF param = "-fa" THEN
getVal(i, options.PE32FileAlignment)
ELSIF param = "-out" THEN ELSIF param = "-out" THEN
INC(i); INC(i);
UTILS.GetArg(i, param); UTILS.GetArg(i, param);
@@ -255,6 +258,7 @@ BEGIN
C.StringLn(" -rom <size> set size of ROM in bytes (MSP430) or Kbytes (STM32)"); C.Ln; C.StringLn(" -rom <size> set size of ROM in bytes (MSP430) or Kbytes (STM32)"); C.Ln;
C.StringLn(" -tab <width> set width for tabs"); C.Ln; C.StringLn(" -tab <width> set width for tabs"); C.Ln;
C.StringLn(" -uses list imported modules"); C.Ln; C.StringLn(" -uses list imported modules"); C.Ln;
C.StringLn(" -fa <size> set PE32 file alignment {512 (def.), 1024, 2048, 4096}"); C.Ln;
UTILS.Exit(0) UTILS.Exit(0)
END; END;
+10 -4
View File
@@ -1,7 +1,7 @@
(* (*
BSD 2-Clause License BSD 2-Clause License
Copyright (c) 2018-2020, Anton Krotov Copyright (c) 2018-2020, 2023, Anton Krotov
All rights reserved. All rights reserved.
*) *)
@@ -32,7 +32,6 @@ CONST
SHC_bss = 0C0000080H; SHC_bss = 0C0000080H;
SectionAlignment = 1000H; SectionAlignment = 1000H;
FileAlignment = 200H;
TYPE TYPE
@@ -155,6 +154,7 @@ VAR
SectionHeaders: ARRAY 16 OF IMAGE_SECTION_HEADER; SectionHeaders: ARRAY 16 OF IMAGE_SECTION_HEADER;
libcnt: INTEGER; libcnt: INTEGER;
SizeOfWord: INTEGER; SizeOfWord: INTEGER;
FileAlignment: INTEGER;
PROCEDURE Export (program: BIN.PROGRAM; name: INTEGER; VAR ExportDir: IMAGE_EXPORT_DIRECTORY): INTEGER; PROCEDURE Export (program: BIN.PROGRAM; name: INTEGER; VAR ExportDir: IMAGE_EXPORT_DIRECTORY): INTEGER;
@@ -348,7 +348,7 @@ BEGIN
END WriteFileHeader; END WriteFileHeader;
PROCEDURE write* (program: BIN.PROGRAM; FileName: ARRAY OF CHAR; console, dll, amd64: BOOLEAN); PROCEDURE write* (program: BIN.PROGRAM; FileName: ARRAY OF CHAR; console, dll, amd64: BOOLEAN; fa: INTEGER);
VAR VAR
i, n, temp: INTEGER; i, n, temp: INTEGER;
@@ -465,6 +465,12 @@ VAR
BEGIN BEGIN
IF (fa = 512) OR (fa = 1024) OR (fa = 2048) OR (fa = 4096) THEN
FileAlignment := fa
ELSE
FileAlignment := 512
END;
SizeOfWord := SIZE_OF_DWORD * (ORD(amd64) + 1); SizeOfWord := SIZE_OF_DWORD * (ORD(amd64) + 1);
Size.Code := CHL.Length(program.code); Size.Code := CHL.Length(program.code);
@@ -516,7 +522,7 @@ BEGIN
OptionalHeader.MinorSubsystemVersion := 0X; OptionalHeader.MinorSubsystemVersion := 0X;
OptionalHeader.Win32VersionValue := 0H; OptionalHeader.Win32VersionValue := 0H;
OptionalHeader.SizeOfImage := SectionAlignment; OptionalHeader.SizeOfImage := SectionAlignment;
OptionalHeader.SizeOfHeaders := 400H; OptionalHeader.SizeOfHeaders := MAX(FileAlignment, 1024);
OptionalHeader.CheckSum := 0; OptionalHeader.CheckSum := 0;
OptionalHeader.Subsystem := WCHR((2 + ORD(console)) * ORD(~dll)); OptionalHeader.Subsystem := WCHR((2 + ORD(console)) * ORD(~dll));
OptionalHeader.DllCharacteristics := 0040X; OptionalHeader.DllCharacteristics := 0040X;
+1 -1
View File
@@ -73,7 +73,7 @@ TYPE
OPTIONS* = RECORD OPTIONS* = RECORD
version*, stack*, ram*, rom*, tab*: INTEGER; version*, stack*, ram*, rom*, tab*, PE32FileAlignment*: INTEGER;
pic*, lower*, uses*: BOOLEAN; pic*, lower*, uses*: BOOLEAN;
checking*: SET checking*: SET
+2 -2
View File
@@ -23,8 +23,8 @@ CONST
max32* = 2147483647; max32* = 2147483647;
vMajor* = 1; vMajor* = 1;
vMinor* = 64; vMinor* = 65;
Date* = "22-jan-2023"; Date* = "04-feb-2023";
FILE_EXT* = ".ob07"; FILE_EXT* = ".ob07";
RTL_NAME* = "RTL"; RTL_NAME* = "RTL";
+1 -1
View File
@@ -2486,7 +2486,7 @@ BEGIN
BIN.fixup(program); BIN.fixup(program);
IF TARGETS.OS = TARGETS.osWIN32 THEN IF TARGETS.OS = TARGETS.osWIN32 THEN
PE32.write(program, outname, target = TARGETS.Win32C, target = TARGETS.Win32DLL, FALSE) PE32.write(program, outname, target = TARGETS.Win32C, target = TARGETS.Win32DLL, FALSE, opt.PE32FileAlignment)
ELSIF target = TARGETS.KolibriOS THEN ELSIF target = TARGETS.KolibriOS THEN
KOS.write(program, outname) KOS.write(program, outname)
ELSIF target = TARGETS.KolibriOSDLL THEN ELSIF target = TARGETS.KolibriOSDLL THEN