You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
1.1 KiB
Ruby

#!/usr/bin/env ruby
# frozen_string_literal: true
# SPDX-License-Identifier: MIT OR Apache-2.0
#
# Copyright (c) 2022 Andre Richter <andre.o.richter@gmail.com>
require 'rubygems'
require 'bundler/setup'
require 'colorize'
require 'elftools'
require_relative 'kernel_elf'
require_relative 'cmds'
KERNEL_SYMBOLS_SECTION = '.kernel_symbols'
NUM_KERNEL_SYMBOLS = 'NUM_KERNEL_SYMBOLS'
cmd = ARGV[0]
kernel_elf_path = ARGV[1]
kernel_elf = KernelELF.new(kernel_elf_path, KERNEL_SYMBOLS_SECTION, NUM_KERNEL_SYMBOLS)
case cmd
when '--gen_symbols'
output_file = ARGV[2]
print 'Generating'.rjust(12).green.bold
puts ' Symbols source file'
generate_symbols(kernel_elf, output_file)
when '--get_symbols_section_virt_addr'
addr = get_symbols_section_virt_addr(kernel_elf)
puts "0x#{addr.to_s(16)}"
when '--patch_data'
symbols_blob_path = ARGV[2]
num_symbols = kernel_elf.num_symbols
print 'Patching'.rjust(12).green.bold
puts " Symbols blob and number of symbols (#{num_symbols}) into ELF"
patch_symbol_data(kernel_elf, symbols_blob_path)
patch_num_symbols(kernel_elf)
else
raise
end