|
12 | 12 | ;; La salida de NASM se guarda en /EFI/BOOT/BOOTX64.EFI y se le inyecta el paylo |
13 | 13 | ;; ad (UEFI bootloader + packedKernel.bin) que se requiera. Archivo BOOTX64.EFI, |
14 | 14 | ;; luego de agregado el payload queda: |
15 | | -;; +--------------------------+-------------------------+------------+ |
16 | | -;; | binario uefi.sys | payload | padeo de | |
17 | | -;; | | | | transient | packed | 0x00 hasta | |
18 | | -;; | Encabez | Codigo | Datos | system | Kernel.bin | el fin | |
19 | | -;; | | | | low | hi | | | |
20 | | -;; +---------+--------+-------+-----+------+------------+------------+ |
21 | | -;; |^ |^ |^ |^ |^ |^ |^ ^| |
22 | | -;; 0x0 0x200 0x1000 0x4000 0x4400 0x7000 0x40000 0xFFFFF |
23 | | -;; 0 512B 4KiB 16KiB 17KiB 28KiB 256KiB 1MiB-1 |
| 15 | +;; +--------------------------+-------------------------------+--------+ |
| 16 | +;; | binario uefi.sys | payload | padeo | |
| 17 | +;; | | | | | transient | packed | 0x00 | |
| 18 | +;; | Encabez | Codigo | Datos | start16 | system | Kernel | hasta | |
| 19 | +;; | | | | | low | hi | .bin | el fin | |
| 20 | +;; +---------+--------+-------+---------+------------+--------+--------+ |
| 21 | +;; |^ |^ |^ |^ |^ |^ |^ ^| ^| |
| 22 | +;; 0x0 0x200 0x1000 0x4000 0x4200 0x4400 0x7000 0x40000 0xFFFFF |
| 23 | +;; 0 512B 4KiB 16KiB 16.5KiB 17KiB 28KiB 256KiB 1MiB-1 |
24 | 24 | ;;============================================================================== |
25 | 25 |
|
26 | 26 |
|
| 27 | +START16_SIZE equ 0x200 |
27 | 28 | TSL_BASE_ADDRESS equ 0x800000 |
28 | 29 | TSL_BASE_ADDRESS_LOW equ 0x8000 |
29 | | -TSL_LO_SIZE equ 0x400 |
| 30 | +TSL_LO_SIZE equ 0x800 ;; Puede hacerse 0x400 pero dado que se le s |
| 31 | + ;; uma START16_SIZE quedan 0x600 y prefiero |
| 32 | + ;; alinear a 0x800 que a 0x200. |
| 33 | + |
30 | 34 |
|
31 | 35 | %include "./asm/include/efi.inc" |
32 | 36 | %define utf16(x) __utf16__(x) |
@@ -307,8 +311,15 @@ entryPoint: |
307 | 311 | ;; Ventana en la que se puede activar modo step presionando 's'. |
308 | 312 | call ventana_modo_step |
309 | 313 |
|
310 | | -;; Copio a la section data de la payload el flag cuyo valor es seteado en linked |
311 | | -;; icion para que este disponible cuando se pase a tsl.sys |
| 314 | +;;jmp $ |
| 315 | +;;nop |
| 316 | +;;nop |
| 317 | +;;nop |
| 318 | + |
| 319 | + |
| 320 | + |
| 321 | +;; Copio en la section data de la payload el flag cuyo valor es seteado en linke |
| 322 | +;; dicion para que este disponible cuando se pase a tsl.sys |
312 | 323 | mov al, [STEP_MODE_FLAG] |
313 | 324 | mov [DATA_HI_START_LOAD], al |
314 | 325 |
|
@@ -613,12 +624,15 @@ print_video_information: |
613 | 624 | mov r9, fmt_fb_address |
614 | 625 | call print |
615 | 626 |
|
| 627 | +;; TO-DO: estos 512 ver si lo dejo asi o si lo pongo simbolicamente. |
616 | 628 | verifica_payload: |
617 | | - mov rsi, PAYLOAD + 6 |
| 629 | + mov rsi, PAYLOAD + 6 + 512 ;; The additional 512 bytes are to skip start16, |
| 630 | + ;; which is placed to completely fill the 1st 51 |
| 631 | + ;; 2 bytes of the payload. |
618 | 632 | mov rax, [rsi] |
619 | 633 | mov rbx, "BOOTLOAD" ;; Chequeo simple de payload en lugar. |
620 | 634 | cmp rax, rbx ;; No se puede hacer cmp con operando inmediato de 64... |
621 | | - ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;jne payloadSignatureFail |
| 635 | + jne payloadSignatureFail |
622 | 636 |
|
623 | 637 | get_memmap: |
624 | 638 | mov rdx, [memmap] ;; OUT EFI_MEMORY_DESCRIPTOR *MemoryMap |
@@ -764,29 +778,32 @@ exit_uefi_services: |
764 | 778 |
|
765 | 779 | ;; Payload al destino. Maximo tamano 240KiB y por eso cuando armamos imagen |
766 | 780 | ;; se deberia revisar que no sea mayor. Posible payload (previo copia): |
767 | | - ;; +-----------------------------------+--------------------+ |
768 | | - ;; | tsl.sys | packedKernel.bin | |
769 | | - ;; | code | data | 00..0 | code | data | kernel | mods user | |
770 | | - ;; | low | low | 00..0 | hi | hi | .bin | land.bin | |
771 | | - ;; +-----------------------------------+--------------------+ |
772 | | - ;; |<-- 0x2400 ---------------->| |
773 | | - ;; |<-- 240KiB -------------------------------------------->| |
774 | | - ;; |<-- 0x300 -->| |<----------- 239KiB ------------->| |
775 | | - ;; |<-- 0x400 ---------->| | |
776 | | - ;; |^ |^ |^ |
777 | | - ;; 0x404000 0x404400 0x440000 |
| 781 | + ;; +---------------------------------------------+--------------------+ |
| 782 | + ;; | tsl.sys | packedKernel.bin | |
| 783 | + ;; | start16 | code | data | 00..0 | code | data | kernel | mods user | |
| 784 | + ;; | | low | low | 00..0 | hi | hi | .bin | land.bin | |
| 785 | + ;; +---------------------------------------------+--------------------+ |
| 786 | + ;; | 0x2800 --------------------->|0x2000| |
| 787 | + ;; |< 240KiB -------------------------------------------------------->| |
| 788 | + ;; |< 0x200 >|0x200 |0x100 | |<----------- 238KiB ------------->| |
| 789 | + ;; |< 0x800 ---------------------->| | |
| 790 | + ;; |^ |^ |^ |
| 791 | + ;; 0x404000 0x404800 0x440000 |
778 | 792 | ;; PAYLOAD |
779 | 793 |
|
780 | 794 | ;; Low primeros TSL_LO_SIZE bytes de los 240 del payload. |
781 | | - mov rsi, PAYLOAD |
| 795 | + mov rsi, PAYLOAD + START16_SIZE ;; The additional bytes are to skip start16, whi |
| 796 | + ;; ch is placed to completely fill the 1st 512 bytes |
| 797 | + ;; of the payload. |
| 798 | + |
782 | 799 | mov rdi, TSL_BASE_ADDRESS_LOW |
783 | 800 | mov rcx, TSL_LO_SIZE ;; Bytes a partir de TSL_BASE_ADDRESS_LOW. |
784 | 801 | rep movsb |
785 | 802 |
|
786 | 803 | ;; Hi tsl. Los restantes 239K. Se encuentran alineados a 1K. |
787 | | - mov rsi, PAYLOAD + TSL_LO_SIZE |
| 804 | + mov rsi, PAYLOAD + START16_SIZE + TSL_LO_SIZE |
788 | 805 | mov rdi, TSL_BASE_ADDRESS |
789 | | - mov rcx, (239 * 1024) ;; 239KiB. |
| 806 | + mov rcx, (238 * 1024) ;; 238KiB. |
790 | 807 | rep movsb |
791 | 808 | |
792 | 809 | ;; Datos de video pasamos a siguiente etapa de bootloader. Movemos y queda: |
@@ -1115,7 +1132,7 @@ fmt_test_uefi: dw utf16("test uefi"), 13, 0x0A, 0 |
1115 | 1132 | fmt_test_reg: db "test reg = %r", 0x0A, 0 |
1116 | 1133 |
|
1117 | 1134 | ;;============================================================================== |
1118 | | -;; Here goes the payload |
| 1135 | +;; Space reservation for the payload |
1119 | 1136 | ;; ============================================================================= |
1120 | 1137 |
|
1121 | 1138 | section .payload |
|
0 commit comments