(see the comments section of the Reddit post for what this all means) --- DEFINING THE POLICY --- james@server:~/0x10c-build> cat ../0x10c/kernel/stubsys/policy.example defaults { kernel=@KERNEL_FOLDER@/stubsys.dkrn16 jumplist=@KERNEL_FOLDER@/stubsys.djmp16 symbols=@KERNEL_FOLDER@/stubsys.dsym16 } # image is the .executable format. for applications that will # be loaded at runtime. if this is not defined, the linker will # use .image-direct. instead. format(image): # offset all references to be relative to 0x1000 offset 0x1000 # call upon image-direct to perform the rest chain image-direct # image-direct is the .executable format. for applications that # are linked directly against the kernel. format(image-direct): # write out the code (the linker has already # attached the kernel) write code # internal format that writes the adjustment entries. internal(write-adjustment): # write out adjustment table write total(adjustment) for $i from 0 to total(adjustment) write field(adjustment, $i, address) endfor # internal format that writes the provided entries. internal(write-provided): # write out provided table write total(provided) for $i from 0 to total(provided) write field(provided, $i, label_size) write field(provided, $i, label_text) write field(provided, $i, address) endfor # shared is a custom format supported by this kernel # in this case it.s a shared library, but we can make # any definition here. format(shared): # write out magic header write words(0x8A5F, 0x68FF) # write out tables chain write-adjustment chain write-provided # write out the code chain image-direct # an example of defining a relocatable application format(relocatable): # write out magic header write words(0x1234, 0x5678) # write out tables chain write-adjustment # write out the code chain image-direct --- PARSING THE POLICY --- james@server:~/0x10c-build> dtpolicy/dtpolicy ../0x10c/kernel/stubsys/policy.example print == settings == kernel = @KERNEL_FOLDER@/stubsys.dkrn16 jumplist = @KERNEL_FOLDER@/stubsys.djmp16 symbols = @KERNEL_FOLDER@/stubsys.dsym16 == policies == - image - image-direct - write-adjustment - write-provided - shared - relocatable == policy: image == offset 4096 chain image-direct == policy: image-direct == write code == policy: write-adjustment == write total(adjustment) for $i from 0 to total(adjustment) write field(adjustment, $i, address) endfor == policy: write-provided == write total(provided) for $i from 0 to total(provided) write field(provided, $i, label_size) write field(provided, $i, label_text) write field(provided, $i, address) endfor == policy: shared == write words(35423, 26879) chain write-adjustment chain write-provided chain image-direct == policy: relocatable == write words(4660, 22136) chain write-adjustment chain image-direct --- EVALUATING THE POLICY --- james@server:~/0x10c-build> dtpolicy/dtpolicy ../0x10c/kernel/stubsys/policy.example execute image == executing: image == offset called with 4096 code called write called with: 1 2 3 4 5 6 james@server:~/0x10c-build> dtpolicy/dtpolicy ../0x10c/kernel/stubsys/policy.example execute image-direct == executing: image-direct == code called write called with: 1 2 3 4 5 6 james@server:~/0x10c-build> dtpolicy/dtpolicy ../0x10c/kernel/stubsys/policy.example execute shared == executing: shared == write called with: 26320 26528 total called with 278 write called with: 3 total called with 278 added $i to the list of variables. field called with 278, 0, 288 write called with: field called with 278, 1, 288 write called with: field called with 278, 2, 288 write called with: removed $i to the list of variables. total called with 279 write called with: 3 total called with 279 added $i to the list of variables. field called with 279, 0, 286 write called with: field called with 279, 0, 287 write called with: field called with 279, 0, 288 write called with: field called with 279, 1, 286 write called with: field called with 279, 1, 287 write called with: field called with 279, 1, 288 write called with: field called with 279, 2, 286 write called with: field called with 279, 2, 287 write called with: field called with 279, 2, 288 write called with: removed $i to the list of variables. code called write called with: 1 2 3 4 5 6 james@server:~/0x10c-build> dtpolicy/dtpolicy ../0x10c/kernel/stubsys/policy.example execute relocatable == executing: relocatable == write called with: 27480 27688 total called with 278 write called with: 3 total called with 278 added $i to the list of variables. field called with 278, 0, 288 write called with: field called with 278, 1, 288 write called with: field called with 278, 2, 288 write called with: removed $i to the list of variables. code called write called with: 1 2 3 4 5 6