Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
BrainFuck Compiler 64 - belf.asm

belf.asm

Caricato da: ZioCrocifisso
Scarica il programma completo

  1. global belf
  2.  
  3. section .data
  4.         _start_addr equ 0x08048000
  5.  
  6.         elf_header:
  7.                 e_ident db 0x7f, 'ELF', 2, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 16
  8.                 e_type dw 2
  9.                 e_machine dw 62
  10.                 e_version dd 1
  11.                 e_entry dq _p2_vaddr
  12.                 e_phoff dq (program_header - elf_header)
  13.                 e_shoff dq (section_table - elf_header)
  14.                 e_flags dd 0
  15.                 e_ehsize dw (elf_header_end - elf_header)
  16.                 e_phentsize dw (phe2 - phe1)
  17.                 e_phnum dw 2
  18.                 e_shentsize dw (sh2 - sh1)
  19.                 e_shnum dw 4
  20.                 e_shstrndx dw 1
  21.  
  22.         elf_header_end:
  23.         section_table:
  24.                 sh0:
  25.                         sh0_name dd 0
  26.                         sh0_type dd 0
  27.                         sh0_flags dq 0
  28.                         sh0_addr dq 0
  29.                         sh0_offset dq 0
  30.                         sh0_size dq 0
  31.                         sh0_link dd 0
  32.                         sh0_info dd 0
  33.                         sh0_addralign dq 0
  34.                         sh0_entsize dq 0
  35.  
  36.                 sh1:
  37.                         sh1_name dd (string_shstrtab - string_table)
  38.                         sh1_type dd 3
  39.                         sh1_flags dq 0
  40.                         sh1_addr dq 0
  41.                         sh1_offset dq (string_table - elf_header)
  42.                         sh1_size dq (string_table_end - string_table)
  43.                         sh1_link dd 0
  44.                         sh1_info dd 0
  45.                         sh1_addralign dq 0
  46.                         sh1_entsize dq 0
  47.  
  48.                 sh2:
  49.                         sh2_name dd (string_data - string_table)
  50.                         sh2_type dd 1
  51.                         sh2_flags dq 0b011
  52.                         sh2_addr dq _p1_vaddr
  53.                         sh2_offset dq (data_segment - elf_header)
  54.                         sh2_size dq (data_segment_end - data_segment)
  55.                         sh2_link dd 0
  56.                         sh2_info dd 0
  57.                         sh2_addralign dq 8
  58.                         sh2_entsize dq 0
  59.  
  60.                 sh3:
  61.                         sh3_name dd (string_text - string_table)
  62.                         sh3_type dd 1
  63.                         sh3_flags dq 0b110
  64.                         sh3_addr dq _p2_vaddr
  65.                         sh3_offset dq (text_segment - elf_header)
  66.                         sh3_size dq (text_segment_end - text_segment)
  67.                         sh3_link dd 0
  68.                         sh3_info dd 0
  69.                         sh3_addralign dq 8
  70.                         sh3_entsize dq 0
  71.  
  72.         program_header:
  73.                 phe1:
  74.                         p1_type dd 1
  75.                         p1_flags dd 0b110
  76.                         _p1_offset equ (data_segment - elf_header)
  77.                         p1_offset dq _p1_offset
  78.                         _p1_vaddr equ (_p1_offset + _start_addr)
  79.                         p1_vaddr dq _p1_vaddr
  80.                         p1_paddr dq _p1_vaddr
  81.                         p1_filesz dq (text_segment - data_segment)
  82.                         p1_memsz dq (text_segment - data_segment)
  83.                         _p1_align equ 2 << 20
  84.                         p1_align dq _p1_align
  85.                 phe2:
  86.                         p2_type dd 1
  87.                         p2_flags dd 0b101
  88.                         _p2_offset equ (text_segment - elf_header)
  89.                         p2_offset dq _p2_offset
  90.                         _p2_vaddr equ (_p2_offset + _start_addr)
  91.                         p2_vaddr dq _p2_vaddr
  92.                         p2_paddr dq _p2_vaddr
  93.                         p2_filesz dq (eof - text_segment)
  94.                         p2_memsz dq (eof - text_segment)
  95.                         _p2_align equ 2 << 20
  96.                         p2_align dq _p2_align
  97.  
  98.         string_table:
  99.                 string_shstrtab db '.shstrtab', 0
  100.                 string_data db '.data', 0
  101.                 string_text db '.text', 0
  102.         string_table_end:
  103.  
  104.         data_segment:
  105.                 times 0x10000 db 0
  106.         data_segment_end:
  107.  
  108.         text_segment:
  109.                 mov r13, dword _p2_vaddr
  110.                 mov r14, dword _p1_vaddr
  111.                 mov r15, 0
  112.         text_segment_end:
  113.  
  114.         eof:
  115.  
  116. section .text
  117.         belf:
  118.                 add qword [p2_filesz], rsi
  119.                 add qword [p2_memsz], rsi
  120.                 add qword [sh3_size], rsi
  121.  
  122.                 push rdi
  123.                 push rsi
  124.  
  125.                 mov rax, 1
  126.                 mov rdi, 1
  127.                 mov rsi, elf_header
  128.                 mov rdx, (eof - elf_header)
  129.                 syscall
  130.  
  131.                 mov rax, 1
  132.                 mov rdi, 1
  133.                 pop rdx
  134.                 pop rsi
  135.                 syscall
  136.  
  137.                 ret