Moved compact ndisasm to a separate file so that it can be called in several places
This commit is contained in:
parent
9917f2dfda
commit
272177fbf7
3
example-os/.gitignore
vendored
3
example-os/.gitignore
vendored
|
@ -1,4 +1,5 @@
|
|||
/os.sh
|
||||
/os.ndisasm.disasm
|
||||
/os.reasm.asm
|
||||
/os.reasm
|
||||
/os.reasm
|
||||
/os.reasm.disasm
|
|
@ -9,14 +9,7 @@ os.sh: os.asm ../deploy-screenshots Makefile
|
|||
chmod a+x $@
|
||||
|
||||
os.ndisasm.disasm: os.sh Makefile
|
||||
(echo "[BITS 16]"; \
|
||||
echo "[ORG 0x7c00]"; \
|
||||
ndisasm -o 0x7C00 $< \
|
||||
| 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).
|
||||
../utils/compact-ndisasm.sh $< $@
|
||||
|
||||
os.reasm.asm: os.ndisasm.disasm Makefile
|
||||
sed -r -e 's/^[^ ]+ +[^ ]+ +//' $< > $@
|
||||
|
@ -26,7 +19,9 @@ os.reasm: os.reasm.asm os.sh Makefile
|
|||
@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)
|
||||
|| (../utils/compact-ndisasm.sh $@ os.reasm.disasm; \
|
||||
echo "[0;33mRe-assembled file is different from os.sh. Use meld os.ndisasm.disasm os.reasm.disasm to see differences.[m"; \
|
||||
exit 1)
|
||||
|
||||
.PHONY: clean Makefile
|
||||
clean:
|
||||
|
|
16
utils/compact-ndisasm.sh
Executable file
16
utils/compact-ndisasm.sh
Executable file
|
@ -0,0 +1,16 @@
|
|||
in=$1
|
||||
out=$2
|
||||
|
||||
# Add -s 0x1234 to te ndisasm command-line to specify that there is an
|
||||
# instruction starting at 0x1234. Use this when ndisasm misinterprets
|
||||
# some instructions due to db.
|
||||
skip=""
|
||||
for i in `seq 0 255`; do skip="$skip -s 0x7e$(printf %02x $i)"; done
|
||||
(echo "[BITS 16]"; \
|
||||
echo "[ORG 0x7c00]"; \
|
||||
ndisasm -s 0x7c78 $skip -o 0x7C00 "$in" \
|
||||
| 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+j[^ ]+ )0x/\1short 0x/') > "$out"
|
||||
# The last sed line just above fixes an issue with ndisasm
|
||||
# (it fails to annotate jz and jnc (and possibly other) with short).
|
Loading…
Reference in New Issue
Block a user