用于反汇编(objdump -d)输出文件的vim定义

本文译至:http://qiita.com/shiracamus/items/61ffc618f204342e352f

在 CTF(Capture The Flag) 中经常需要查看objdump -d 或 -D反汇编 x86/x64 二进制文件的结果、所以这里就定义了vim的相关标签。
反汇编的文件经常以 *.dis 或 *.dis-intel 命名,这些文件打开时就可以自动对应相关的 vim 定义。

弄了一个git仓库。
https://github.com/shiracamus/vim-syntax-x86-objdump-d

~/.vim/filetype.vim
augroup filetypedetect
        au BufRead,BufNewFile *.dis* setfiletype dis
augroup END
~/.vim/syntax/dis.vim
" Vim syntax file
" Language:     x86/x64 GNU Disassembler (objdump -d -Mintel)
" Maintainer:   @shiracamus <shiracamus@gmail.com>
" Last Change:  2013 Dec 30

" For version 5.x: Clear all syntax items
" For version 6.0 and later: Quit when a syntax file was already loaded
if version < 600
  syntax clear
elseif exists("b:current_syntax")
  finish
endif

let s:cpo_save = &cpo
set cpo&vim

syn case ignore

syn match disOffset     "[+-]"
syn match disNumber     "[+-]\?\<0x[0-9a-f]\+\>" contains=disOffset
syn match disNumber     "[+-]\?\<[0-9a-f]\+\>" contains=disOffset

syn match disRegister   "\<[re]\?[abcd][xhl]\>"
syn match disRegister   "\<[re]\?[sd]il\?\>"
syn match disRegister   "\<[re]\?[sbi]pl\?\>"
syn match disRegister   "\<r[0-9]\+[dwb]\?\>"
syn match disRegister   "[^\t]\<[cdefgs]s\>"hs=s+1

syn match disAt         "@"
syn match disSection    " \.[a-z][a-z_\.-]*:"he=e-1
syn match disSection    "@[a-z0-9_][a-z0-9_-]\+"hs=s+1 contains=disAt,disNumber

syn match disLabel      "<[a-z0-9_.][a-z0-9_.@+-]\+>"hs=s+1,he=e-1 contains=disNumber,disSection
syn match disHexDump    ":\t\([0-9a-f][0-9a-f] \)\+"hs=s+1

syn match disError      "<internal disassembler error>"
syn match disError      "(bad)"

syn keyword disTodo     contained TODO

syn region disComment   start="/\*" end="\*/" contains=disTodo
syn match disComment    "[#;!|].*" contains=disLabel,disTodo

syn match disSpecial    display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
syn region disString    start=+"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=disSpecial
syn region disString    start=+'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=disSpecial

syn match disFormat     ": \+file format "
syn match disTitle      "^[^ ]\+: \+file format .*$" contains=disFormat

syn match disMacro      "FWORD"
syn match disMacro      "QWORD"
syn match disMacro      "DWORD"
syn match disMacro      "BYTE"
syn match disMacro      "PTR"

syn match disData       ".word"
syn match disData       ".short"
syn match disData       ".byte"

" Opecode matched disNumber
syn match disOpecode    "\<add "
syn match disOpecode    "\<adc "
syn match disOpecode    "\<dec "
syn match disOpecode    "\<fadd "

syn case match

" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_dis_syntax_inits")
  if version < 508
    let did_dis_syntax_inits = 1
    command -nargs=+ HiLink hi link <args>
  else
    command -nargs=+ HiLink hi def link <args>
  endif

  " The default methods for highlighting.  Can be overridden later
  " Comment
  HiLink disComment     Comment
  " Constant: String, Character, Number, Boolean, Float
  HiLink disNumber      Number
  HiLink disString      String
  " Identifier: Function
  HiLink disHexDump     Identifier
  "Statement: Conditional, Repeat, Label, Operator, Keyword, Exception
  HiLink disLabel       Label
  " PreProc: Include, Define, Macro, PreCondit
  HiLink disData        Define
  HiLink disMacro       Macro
  " Type: StorageClass, Structure, Typedef
  HiLink disRegister    StorageClass
  HiLink disTitle       Typedef
  " Special: SpecialChar, Tag, Delimiter, SpecialComment, Debug
  HiLink disSpecial     SpecialChar
  HiLink disSection     Special
  " Underlined
  " Ignore
  " Error
  HiLink disError       Error
  " Todo
  HiLink disTodo        Todo

  delcommand HiLink
endif

let b:current_syntax = "dis"

let &cpo = s:cpo_save
unlet s:cpo_save

" vim: ts=8 sts=4 sw=2

最后的效果如下所示:

dis.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值