⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asmi386.sh

📁 c++写的一个脚本解释器
💻 SH
字号:
#!/bin/sh# Translate the assembler syntax of i386 assembler programs# Usage: asmsyntax [-no-C] < gas-asm-file > all-asm-file# Warning! All comments are stripped.tmpscript01=sed$$tmp01tmpscript02=sed$$tmp02tmpscript03=sed$$tmp03tmpscript04=sed$$tmp04tmpscript05=sed$$tmp05tmpscript06=sed$$tmp06tmpscript07=sed$$tmp07tmpscript08=sed$$tmp08tmpscript09=sed$$tmp09tmpscript10=sed$$tmp10tmpscript11=sed$$tmp11tmpremove='rm -f $tmpscript01 $tmpscript02 $tmpscript03 $tmpscript04 $tmpscript05 $tmpscript06 $tmpscript07 $tmpscript08 $tmpscript09 $tmpscript10 $tmpscript11'trap "$tmpremove" 1 2 15cat > $tmpscript01 << \EOF# ----------- Strip commentss,# .*,,s,[ 	][ 	]*$,,EOFcat > $tmpscript02 << \EOF# ----------- Remove #APP/#NO_APP lines, add a blank line at the end/^#APP$/d/^#NO_APP$/d/gcc2_compiled/d/gnu_compiled_c/dEOFcat > $tmpscript03 << \EOF# ----------- Global symbols depends on ASM_UNDERSCOREs/_\([A-Za-z0-9_:]*\)/C(\1)/EOFcat > $tmpscript04 << \EOF# ----------- Introduce macro syntax for operandss/\([-+0-9A-Z_]\+\)[(]%\(e..\)[)]/MEM_DISP(\2,\1)/gs/[(]%\(e..\)[)]/MEM(\1)/gs/\([-+0-9A-Z_]\+\)[(],%\(e..\),\([0-9]*\)[)]/MEM_DISP_SHINDEX0(\1,\2,\3)/gs/\([-+0-9A-Z_]\+\)[(]%\(e..\),%\(e..\),\([0-9]*\)[)]/MEM_DISP_SHINDEX(\2,\1,\3,\4)/gs/[(]%\(e..\),%\(e..\),\([0-9]*\)[)]/MEM_SHINDEX(\1,\2,\3)/gs/[(]%\(e..\),%\(e..\)[)]/MEM_INDEX(\1,\2)/gEOFcat > $tmpscript05 << \EOF# ----------- Introduce macro syntax for instructionss/\(push\|pop\|mul\|div\|not\|neg\|inc\|dec\|fld\|fstp\)\(.\)\( \+\)\(.*\)$/INSN1(\1,\2	,\4)/s/\(call\|jmp\|jc\|jnc\|je\|jne\|jz\|jnz\|ja\|jae\|jb\|jbe\|jl\|jge\|js\|jns\)\( \+\)\(.*\)$/INSN1(\1,_	,\3)/s/\(movs\|movz\)\(.\)l\( \+\)\(.*\)$/INSN2MOVX(\1,\2	,\4)/s/\(mov\|add\|sub\|adc\|sbb\|xor\|test\|cmp\|rcl\|rcr\|and\|or\|sar\|shr\|shl\|lea\)\(.\)\( \+\)\(.*\)$/INSN2(\1,\2	,\4)/s/\(shld\|shrd\)\(.\)\( \+\)shcl\( \+\)\(.*\)$/INSN2SHCL(\1,\2	,\5)/s/rep ;/REP/s/repz ;/REPZ/EOFcat > $tmpscript06 << \EOF# ----------- Add size prefixes to memory references' \s/\([(]f[^(,]*,s.*\),MEM/\1,X4 MEM/gs/\([(]f[^(,]*,l.*\),MEM/\1,X8 MEM/gs/\([(][^(,]*,b.*\),MEM/\1,X1 MEM/gs/\([(][^(,]*,w.*\),MEM/\1,X2 MEM/gs/\([(][^(,]*,l.*\),MEM/\1,X4 MEM/gEOFcat > $tmpscript07 << \EOF# ----------- Introduce macro syntax for register namess/%\(e..\)/R(\1)/gs/%\(..\)/R(\1)/gs/\$\([-0-9]*\)/NUM(\1)/gEOFcat > $tmpscript08 << \EOF# ----------- Treat table jumps (hairy)# (Needed because the MSVC inline assembler does not have pseudo-ops.# Note that we transform a table of absolute addresses with 4 bytes# per entry into a table of absolute addresses with 8 bytes per entry.)s/^	\.long \(.*\)$/#ifdef _MSC_VER\	nop\	nop\	push \1\#else\	.long \1\#endif/s/^	\(INSN1[(]jmp,_[^,]*,\)\*MEM_DISP_SHINDEX0[(]\([^,)]*\),\([^,)]*\),4[)][)]$/#ifdef _MSC_VER\	INSN2(lea,l	,MEM_DISP_SHINDEX0(\2+8,\3,8),R(\3))\	INSN2(mov,l	,X4 MEM_DISP(\3,-4),R(\3))\	INSN1(jmp,_	,INDIR(R(\3)))\#else\	\1INDIR(MEM_DISP_SHINDEX0(\2,\3,4)))\#endif/EOFcat > $tmpscript09 << \EOF# ----------- Treat indirect callss/\(INSN1[(]\(call\|jmp\),_[^,]*,\)\*\(R[(][^)]*[)]\)[)]$/\1INDIR(\3))/EOFcat > $tmpscript10 << \EOF# ----------- Introduce macro syntax for assembler pseudo-ops/\.file\([ 	]\+\)/ds/\.text/TEXT()/s/^\([^#]*\)\.align \(.*\)/\1ALIGN(\2)/s/\.globl\( \+\)\(.*\)$/GLOBL(\2)/s/^C(\([A-Za-z0-9_]*\):)/FUNBEGIN(\1)/# The next 5 lines add FUNEND() after each ret followed by an empty line/[ 	]ret *$/{n/^$/s/^$/FUNEND()\/}EOFcat > $tmpscript11 << \EOF# ----------- Declare global symbols as functions (we have no variables)s/GLOBL(C(\([A-Za-z0-9_]*\)))$/GLOBL(C(\1))\	DECLARE_FUNCTION(\1)/EOFsed -f $tmpscript01 | \sed -f $tmpscript02 | \(cat - ; echo) | \(if [ $# = 1 -a "x$1" = "x-no-C" ] ; then cat - ; else sed -f $tmpscript03 ; fi) | \sed -f $tmpscript04 | \sed -f $tmpscript05 | \sed -f $tmpscript06 | \sed -f $tmpscript07 | \sed -f $tmpscript08 | \sed -f $tmpscript09 | \sed -f $tmpscript10 | \(if [ $# = 1 -a "x$1" = "x-no-C" ] ; then cat - ; else sed -f $tmpscript11 ; fi)eval "$tmpremove"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -