diff options
-rw-r--r-- | cbfs_poc/Makefile | 14 | ||||
-rw-r--r-- | cbfs_poc/module_lol.c | 25 | ||||
-rwxr-xr-x | convert2.rb | 20 |
3 files changed, 18 insertions, 41 deletions
diff --git a/cbfs_poc/Makefile b/cbfs_poc/Makefile index 73856a8..cd38fd4 100644 --- a/cbfs_poc/Makefile +++ b/cbfs_poc/Makefile @@ -1,20 +1,10 @@ PWD := $(shell pwd) KSRC ?= /bad__ksrc__not_set -COREBOOT ?= /bad__coreboot__not_set -LIBPAYLOAD ?= $(COREBOOT)/payloads/libpayload -CBFS_A ?= $(LIBPAYLOAD)/build/libcbfs.a -CBFS_INCLUDES ?= -I$(readlink -f .) -I$(LIBPAYLOAD)/include -I$(LIBPAYLOAD)/include/i386 -EXTRA_CFLAGS += -D_ARCH_TYPES_H -I$(LIBPAYLOAD)/include -I$(LIBPAYLOAD)/include/i386 +EXTRA_CFLAGS += -D_ARCH_TYPES_H -obj-m := module_lol.o -module_lol-y += libcbfs.a - -modules: - -libcbfs.a: - cp $(CBFS_A) $@ +obj-m := cbfs_poc.o modules modules_install clean: $(MAKE) -C $(KSRC) M=$(PWD) $@ diff --git a/cbfs_poc/module_lol.c b/cbfs_poc/module_lol.c deleted file mode 100644 index 80dc000..0000000 --- a/cbfs_poc/module_lol.c +++ /dev/null @@ -1,25 +0,0 @@ -#include <linux/module.h> -#include <linux/types.h> -#include <linux/module.h> -#include <cbfs.h> - -#define DRIVER_NAME "cbfs_poc" - -static int init_cbfs_poc(void) -{ - struct cbfs_header* header; - setup_cbfs_from_flash(); - header = get_cbfs_header(); - if (header == (void*)0xffffffff) - printk("Header not found!\n"); - else - printk("Header found at address %p\n", header); - return 0; -} -module_init(init_cbfs_poc); - -static void exit_cbfs_poc(void) -{ -} -module_exit(exit_cbfs_poc); - diff --git a/convert2.rb b/convert2.rb index 94e296f..15d8dcd 100755 --- a/convert2.rb +++ b/convert2.rb @@ -179,6 +179,13 @@ class Reg end end + def cnalyze value, stream=$stdout + stream << @fields.zip(fvs(value)). + reject!{|f,fv| fv == 0 }. + map{|f,fv| "#{fv} << #{@name}_#{f.name}" }. + join(" | ") << "\n" + end + def analyze_one f, fv, longest, longest_name, stream=$stdout tabs = "\t" * [2 - f.name.length / 8, 0].max width = f.start - f.stop + 1 @@ -225,6 +232,7 @@ opts = Trollop::options do banner usage opt :l, "Read log and print a more verbose version" opt :d, "Read memory dump and print a more verbose version" + opt :c, "Produce C code instead of human-readable description" end def load_data f @@ -244,16 +252,16 @@ def reg_from_name data, name, stream=BlackHole stream << " (register #{regname} does not exist!)" return nil else - regname = canonical[regname] = regs.first + regname = $canonical[regname] = regs.first stream << " (interpreted as register #{regname})" end end reg = Reg.from_map(data[regname], regname) end -require 'pp' + def reg_from_number data, str, stream=BlackHole - rega = str.to_i 16 + rega = str.to_i 0 if rega != 0 or str =~ /^(0x)?0+$/ reg = data.select do |k,v| if v["recurring"] @@ -355,7 +363,11 @@ when 3 exit end value = ARGV[2].to_i 0 - reg.analyze(value) + if opts.c + reg.cnalyze(value) + else + reg.analyze(value) + end when 4 data = load_data ARGV[0] reg = reg_from_str(data, ARGV[1], $stdout) |