Чтобы не писать все в одну тему
Comdiv писал(а):
А в чём различие в метаданных?
Метаданные в Kernel зависят от размерности указателя. Для 32-бит это:
Код:
Module* = POINTER TO RECORD [untagged]
next-: Module;
opts-: SET; (* 0..15: compiler opts, 16..31: kernel flags *)
refcnt-: INTEGER; (* <0: module invalidated *)
compTime-, loadTime-: ARRAY 6 OF SHORTINT;
ext-: INTEGER; (* currently not used *)
term-: Command; (* terminator *)
nofimps-, nofptrs-: INTEGER;
csize-, dsize-, rsize-: INTEGER;
code-, data-, refs-: INTEGER;
procBase-, varBase-: INTEGER; (* meta base addresses *)
names-: POINTER TO ARRAY [untagged] OF SHORTCHAR; (* names[0] = 0X *)
ptrs-: POINTER TO ARRAY [untagged] OF INTEGER;
imports-: POINTER TO ARRAY [untagged] OF Module;
export-: Directory; (* exported objects (name sorted) *)
name-: Utf8Name
END;
Для 64 бит будет:
Код:
Module* = POINTER TO RECORD [untagged]
next-: Module;
opts-: SET; (* 0..15: compiler opts, 16..31: kernel flags *)
refcnt-: INTEGER; (* <0: module invalidated *)
compTime-, loadTime-: ARRAY 6 OF SHORTINT;
ext-: LONGINT; (* currently not used *)
term-: Command; (* terminator *)
nofimps-, nofptrs-: INTEGER;
csize-, dsize-, rsize-: LONGINT;
code-, data-, refs-: LONGINT;
procBase-, varBase-: LONGINT; (* meta base addresses *)
names-: POINTER TO ARRAY [untagged] OF SHORTCHAR; (* names[0] = 0X *)
ptrs-: POINTER TO ARRAY [untagged] OF LONGINT;
imports-: POINTER TO ARRAY [untagged] OF Module;
export-: Directory; (* exported objects (name sorted) *)
name-: Utf8Name
END;
Поэтому, даже в HelloWorld для 32 бит описание модуля будет типом
Код:
%SYSTEM_MODDESC = type { %SYSTEM_MODDESC*, i32, i32, [6 x i16], [6 x i16], void ()*, void ()*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [0 x i8]*, [1 x i32]*, [4 x %SYSTEM_MODDESC*]*, %SYSTEM_DIRECTORY*, [256 x i8] }
А для 64 бит типом
Код:
%SYSTEM_MODDESC = type { %SYSTEM_MODDESC*, i32, i32, [6 x i16], [6 x i16], void ()*, void ()*, i32, i32, i64, i64, i64, i64, i64, i64, i64, i64, [0 x i8]*, [1 x i64]*, [4 x %SYSTEM_MODDESC*]*, %SYSTEM_DIRECTORY*, [256 x i8] }