mirror of
https://github.com/veracrypt/VeraCrypt
synced 2024-11-10 13:13:34 +01:00
MBR Bootloader: dynamically determine boot loader memory segment instead of hardcoded values (proposed by neos6464 at https://sourceforge.net/p/veracrypt/tickets/240/)
This commit is contained in:
parent
e0049f601a
commit
3e1460b618
@ -43,23 +43,24 @@ main:
|
|||||||
call print
|
call print
|
||||||
skip_loader_name_msg:
|
skip_loader_name_msg:
|
||||||
|
|
||||||
; Determine boot loader segment
|
; Determine boot loader segment
|
||||||
mov ax, TC_BOOT_LOADER_SEGMENT
|
mov ax, word ptr [ds:413h] ;available kB from BIOS
|
||||||
|
sub ax, TC_BOOT_MEMORY_REQUIRED ;minus TC_BOOT_MEMORY_REQUIRED
|
||||||
|
jc mem_toolow
|
||||||
|
and ax, 0FFE0h ;32K align
|
||||||
|
shl ax, 6 ;convert kB to segment addr (*1024/16)
|
||||||
|
cmp ax, 8000h
|
||||||
|
jb mem_toolow ;we can't load below 8000h
|
||||||
|
cmp ax, TC_BOOT_LOADER_SEGMENT
|
||||||
|
jbe memory_ok ;don't load above TC_BOOT_LOADER_SEGMENT (9000h)
|
||||||
|
mov ax, TC_BOOT_LOADER_SEGMENT
|
||||||
|
jmp memory_ok
|
||||||
|
|
||||||
; Check available memory
|
mem_toolow:
|
||||||
cmp word ptr [ds:413h], TC_BOOT_LOADER_SEGMENT / 1024 * 16 + TC_BOOT_MEMORY_REQUIRED
|
mov ax, TC_BOOT_LOADER_LOWMEM_SEGMENT
|
||||||
jge memory_ok
|
|
||||||
|
|
||||||
mov ax, TC_BOOT_LOADER_SEGMENT_LOW
|
|
||||||
|
|
||||||
cmp word ptr [ds:413h], TC_BOOT_LOADER_SEGMENT_LOW / 1024 * 16 + TC_BOOT_MEMORY_REQUIRED
|
|
||||||
jge memory_ok
|
|
||||||
|
|
||||||
; Insufficient memory
|
|
||||||
mov ax, TC_BOOT_LOADER_LOWMEM_SEGMENT
|
|
||||||
|
|
||||||
memory_ok:
|
memory_ok:
|
||||||
mov es, ax
|
mov es, ax
|
||||||
|
|
||||||
; Clear BSS section
|
; Clear BSS section
|
||||||
xor al, al
|
xor al, al
|
||||||
|
Loading…
Reference in New Issue
Block a user