Disassemble the OS (use a compact representation for repetitive parts), re-assemble and check that the result is identical.
This commit is contained in:
parent
b923600593
commit
d812fc27bd
5
example-os/.gitignore
vendored
5
example-os/.gitignore
vendored
|
@ -1 +1,4 @@
|
|||
/os.sh
|
||||
/os.sh
|
||||
/os.ndisasm.disasm
|
||||
/os.reasm.asm
|
||||
/os.reasm
|
|
@ -1,5 +1,5 @@
|
|||
.PHONY: all
|
||||
all: os.sh
|
||||
all: os.sh os.ndisasm.disasm os.reasm.asm os.reasm
|
||||
|
||||
../deploy-screenshots:
|
||||
mkdir $@
|
||||
|
@ -8,6 +8,28 @@ os.sh: os.asm ../deploy-screenshots Makefile
|
|||
nasm -o $@ $<
|
||||
chmod a+x $@
|
||||
|
||||
os.ndisasm.disasm: os.sh Makefile
|
||||
ndisasm $< \
|
||||
| uniq -s 8 -c \
|
||||
| sed -r -e 's/\s*1 //; t; s/\s*([0-9]+) ([^ ]+\s+[^ ]+\s+)/\2times \1 /' \
|
||||
| sed -r -e 's/([^ ]+\s+[0-9A-F]{4}\s+jz) 0x/\1 short 0x/' > $@
|
||||
# The last sed line just above fixes an issue with ndisasm
|
||||
# (it fails to annotate the jz with short).
|
||||
|
||||
os.reasm.asm: os.ndisasm.disasm Makefile
|
||||
sed -r -e 's/^[^ ]+ +[^ ]+ +//' $< > $@
|
||||
|
||||
os.reasm: os.reasm.asm os.sh Makefile
|
||||
nasm $< -o $@
|
||||
@echo "diff $@ os.sh"
|
||||
@diff $@ os.sh \
|
||||
&& echo "[1;32mRe-assembled file is identical to os.sh[m" \
|
||||
|| (echo "[0;33mRe-assembled file is different from os.sh[m"; exit 1)
|
||||
|
||||
.PHONY: clean Makefile
|
||||
clean:
|
||||
rm -f os.sh os.ndisasm.disasm os.reasm.asm os.reasm
|
||||
|
||||
.PHONY: test
|
||||
test: test-qemu-system-i386 test-qemu-system-arm test-virtualbox test-bochs Makefile
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user