добавлен параметр -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
+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
BIN
View File
Binary file not shown.
+2
View File
@@ -34,6 +34,8 @@ UTF-8 с BOM-сигнатурой.
-def <имя> задать символ условной компиляции
-ver <major.minor> версия программы (только для kosdll)
-uses вывести список импортированных модулей
-fa <size> выравнивание секций файла PE32 в байтах, возможные значения:
512, 1024, 2048, 4096. По умолчанию - 512
параметр -nochk задается в виде строки из символов:
"p" - указатели
+2
View File
@@ -31,6 +31,8 @@ UTF-8 с BOM-сигнатурой.
идентификаторов
-def <имя> задать символ условной компиляции
-uses вывести список импортированных модулей
-fa <size> выравнивание секций файла PE32 в байтах, возможные значения:
512, 1024, 2048, 4096. По умолчанию - 512
параметр -nochk задается в виде строки из символов:
"p" - указатели
+1 -1
View File
@@ -2414,7 +2414,7 @@ BEGIN
BIN.fixup(prog);
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
ELF.write(prog, outname, sofinit, target = TARGETS.Linux64SO, TRUE)
END
+4
View File
@@ -66,6 +66,9 @@ BEGIN
DEC(i)
END
ELSIF param = "-fa" THEN
getVal(i, options.PE32FileAlignment)
ELSIF param = "-out" THEN
INC(i);
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(" -tab <width> set width for tabs"); 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)
END;
+10 -4
View File
@@ -1,7 +1,7 @@
(*
BSD 2-Clause License
Copyright (c) 2018-2020, Anton Krotov
Copyright (c) 2018-2020, 2023, Anton Krotov
All rights reserved.
*)
@@ -32,7 +32,6 @@ CONST
SHC_bss = 0C0000080H;
SectionAlignment = 1000H;
FileAlignment = 200H;
TYPE
@@ -155,6 +154,7 @@ VAR
SectionHeaders: ARRAY 16 OF IMAGE_SECTION_HEADER;
libcnt: INTEGER;
SizeOfWord: INTEGER;
FileAlignment: INTEGER;
PROCEDURE Export (program: BIN.PROGRAM; name: INTEGER; VAR ExportDir: IMAGE_EXPORT_DIRECTORY): INTEGER;
@@ -348,7 +348,7 @@ BEGIN
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
i, n, temp: INTEGER;
@@ -465,6 +465,12 @@ VAR
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);
Size.Code := CHL.Length(program.code);
@@ -516,7 +522,7 @@ BEGIN
OptionalHeader.MinorSubsystemVersion := 0X;
OptionalHeader.Win32VersionValue := 0H;
OptionalHeader.SizeOfImage := SectionAlignment;
OptionalHeader.SizeOfHeaders := 400H;
OptionalHeader.SizeOfHeaders := MAX(FileAlignment, 1024);
OptionalHeader.CheckSum := 0;
OptionalHeader.Subsystem := WCHR((2 + ORD(console)) * ORD(~dll));
OptionalHeader.DllCharacteristics := 0040X;
+1 -1
View File
@@ -73,7 +73,7 @@ TYPE
OPTIONS* = RECORD
version*, stack*, ram*, rom*, tab*: INTEGER;
version*, stack*, ram*, rom*, tab*, PE32FileAlignment*: INTEGER;
pic*, lower*, uses*: BOOLEAN;
checking*: SET
+2 -2
View File
@@ -23,8 +23,8 @@ CONST
max32* = 2147483647;
vMajor* = 1;
vMinor* = 64;
Date* = "22-jan-2023";
vMinor* = 65;
Date* = "04-feb-2023";
FILE_EXT* = ".ob07";
RTL_NAME* = "RTL";
+1 -1
View File
@@ -2486,7 +2486,7 @@ BEGIN
BIN.fixup(program);
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
KOS.write(program, outname)
ELSIF target = TARGETS.KolibriOSDLL THEN