Category Archives: 工具和技巧

让Vim和Ctags支持smali语法

smali是目前Dalvik指令集最适合阅读和解析的汇编语法,是做Android软件逆向分析必须学习的内容。比较可惜的是,到现在也没有特别好的smali阅读工具。下面给出的是平时习惯的Vim+Ctags组合下阅读smali的方法。先看最终效果:

可以看到,vim支持smali的语法高亮,ctags支持解析smali中的域和方法。实现这个的方法如下:

Continue reading

用于LaTeX的smali语法高亮文件

smali是对Dalvik虚拟机指令集的一种汇编语法,基于jasmin语法修改而来。在LaTeX中引用代码,一般使用listings宏包,最后一定修订于1999年的listings显然不会支持smali高亮,所以我写了这样一个文件,下载地址:

http://code.google.com/p/amatutor/source/browse/smali.sty

效果如下:

LaTeX的smali语法高亮效果

其中关键词和配色方案参考了lohan+在其博客http://androidcracking.blogspot.com中提供的smali for Vim/Notepad++/UltraEdit/SyntaxHighlighter的高亮文件。再次感谢lohan+的杰出工作。

以及,请关注使用了这一高亮文件的amatutor项目。

LaTeX中换行换页的表格

LaTeX中,表格一般用tabular。如果要表格内容自动换行,则需要使用tabularx宏包。在使用时,指定表格宽度和可能换行的列,例如:

\usepackage{tabularx}

\begin{tablularx}{\textwidth}{lX}
  aa & bbbbbbbbbbbbbbbbbbbbbbbb \\
\end{tabularx}

其中,由X指定的第二列就会根据表格中单元格的宽度自动换行了。

由于表格只是一个box,只能出现在同一页内。要使得表格能够换页,需要使用longtable宏包。例如:

\usepackage{longtable}

\begin{longtable}{ll}
  aa & bbbbbbbbbbbbbbbbbbbbbbbb \\
\end{tabularx}

如果希望两者兼得,该怎么办?有一个叫做ltxtable的宏包就综合了上述两个,能实现既有单元格换行,又有表格换页。比较麻烦的是,ltxtable要求表格内容单独保存为文件,为此再引入filecontents宏包,使表格内容和正文能在同一个文件之中。例如:

\usepackage{ltxtable, filecontents}

\begin{filecontents}{mytable1.tex}
  \begin{longtable}{lX}
    aa & bbbbbbbbbbbbbbbbbbbbbbbb \\
  \end{longtable}
\end{filecontents}

\LTXtable{\textwidth}{mytable1}

其中,filecontents宏包会将其中的内容单独保存为mytable1.tex文件。在这个文件中,longtable可以使用tabularx中的X符号指定要换行的单元格了。此后,调用ltxtable的LTXtable命令,指定表格宽度为\textwidth,并指定引用文件mytable1。这样就可以编译得到单元格内换行、整个表格可换页的表格了。

这里还有两个问题:

1、标题、标签怎么办?这个我还没有查到,尝试放在filecontents中会出错,在ltxtable的文档里也没有。如果有大牛看到这里知道该怎么办,请指教~

2、多出来的tex文件在版本管理里不好办,我的方法是,在filecontents里指定文件为mytable1.tmp而不是.tex后缀名;在LTXtable命令里使用文件全写mytable1.tmp而不是缩写;在.gitignore里忽略以.tmp结尾的临时文件;在Makefile的clean目标里删除.tmp结尾的文件即可。

除了使用ltxtable,还有两个宏包可以解决问题:ltablex和tabu。在stackoverflow上对此有过讨论。据说ltablex和caption会有冲突,但这两个我都没有用过。

最后,所有尝试都是在写amatutor的过程中产生的,欢迎大家继续关注这个项目~

关闭Google搜索结果的URL重定向

Google的搜索结果页面中,点击结果会先打开一个Google的URL,然后由这个URL跳转到搜索结果的真实URL。这个设计给我们带来两个麻烦:

  • 如果要从搜索页右键复制一个结果的URL给其他人,实际得到的会是一个Google的很长的URL
  • 在国内部分地区,频繁访问搜索结果意味着频繁访问google网址,有可能增加被墙概率(也可能是运营商DNS设置问题)

有人在StackExchange提出这一问题。回答中有人给出了解决方案。

在Firefox中,非常简单,只需要安装名为“google search link fix”的插件即可(非常感谢lne留言指出这一点)。

在Chrome浏览器中,则需要点击如下链接:

http://userscripts.org/scripts/source/121923.user.js

然后安装这一js脚本为扩展程序,即可使所有Google搜索结果的链接直接指向真实的URL。
Continue reading