cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

config.py (1329B)


      1# SPDX-License-Identifier: GPL-2.0
      2#
      3# Copyright 2019 Google LLC.
      4
      5import gdb
      6import zlib
      7
      8from linux import utils
      9
     10
     11class LxConfigDump(gdb.Command):
     12    """Output kernel config to the filename specified as the command
     13       argument. Equivalent to 'zcat /proc/config.gz > config.txt' on
     14       a running target"""
     15
     16    def __init__(self):
     17        super(LxConfigDump, self).__init__("lx-configdump", gdb.COMMAND_DATA,
     18                                           gdb.COMPLETE_FILENAME)
     19
     20    def invoke(self, arg, from_tty):
     21        if len(arg) == 0:
     22            filename = "config.txt"
     23        else:
     24            filename = arg
     25
     26        try:
     27            py_config_ptr = gdb.parse_and_eval("&kernel_config_data")
     28            py_config_ptr_end = gdb.parse_and_eval("&kernel_config_data_end")
     29            py_config_size = py_config_ptr_end - py_config_ptr
     30        except gdb.error as e:
     31            raise gdb.GdbError("Can't find config, enable CONFIG_IKCONFIG?")
     32
     33        inf = gdb.inferiors()[0]
     34        zconfig_buf = utils.read_memoryview(inf, py_config_ptr,
     35                                            py_config_size).tobytes()
     36
     37        config_buf = zlib.decompress(zconfig_buf, 16)
     38        with open(filename, 'wb') as f:
     39            f.write(config_buf)
     40
     41        gdb.write("Dumped config to " + filename + "\n")
     42
     43
     44LxConfigDump()