Linux Links

http://www.linuxlinks.com/ /* 这个连结比较全, 可能会有用 */

http://www.insecure.org/nmap/man/zh/ /* Nmap 中文帮助 */

http://www.securitydocs.com/ /* 安全文档 */

http://seclists.org/lists/pen-test/2006/Jan/0060.html **SCANNING & ENUMERATION TECHNIQUES **

http://www.insecure.org/tools.html /** 安全工具 TOP 75 **/

嵌入式系列:

http://www.embed.com.cn/

http://www.embedworld.com/embedworld/www1/

Leave a Comment

VIM: if_cscop

IF_CSCOP

*if_cscop.txt*  For Vim version 6.3.  最近更新:2005年3月

VIM REFERENCE MANUAL    by Andy Kahn
译者:lang2 http://vimcdoc.sf.net

*cscope* *Cscope*
本文档阐述如何使用 Vim 的 cscope 界面。

Cscope 是一个类似 ctags 的工具。 你可以把它想作是超过频的 ctags,因为它功能比
ctags 强大很多。 在 Vim 里,通过 cscope 查询结果来跳转就象跳转到其他的标签完
全一样; 它被保存在标签堆栈里。这样你就可以象使用 |tags| 一样在函数等等之间便捷
的跳转。

1. Cscope 简介                        |cscope-intro|
2. Cscope 相关命令          |cscope-commands|
3. Cscope 选项                        |cscope-options|
4. 如何在 Vim 中使用 cscope       |cscope-howtouse|
5. 缺陷                               |cscope-limitations|
6. 建议的使用方法                |cscope-suggestions|
7. 如何获取 cscope 等等           |cscope-info|

到目前为止 cscope 界面仅在 Unix 及 Win32 平台下有效。
{Vi does not have any of these commands}

1. Cscope 简介                                                *cscope-intro*

下面文本摘自 cscope 的手册页:

Cscope 是一个交互式的屏幕下使用的工具,用来帮助你:

无须在厚厚的程序清单中翻来翻去就可以认识一个 C 程序的工作原理。

无须熟悉整个程序就可以知道清楚程序 bug 所要修改的代码位置。

检查提议的改动 (如添加一个枚举值) 可能会产生的效果。

验证所有的源文件都已经作了需要的修改;例如给某一个现存的函数添加
一个参数。

在所有相关的源文件中对一个全局变量改名。

在所有相关的位置将一个常数改为一个预处理符号。

它被设计用来回答一下的问题:
什么地方用到了这个符号?
这是在什么地方定义的?
这个变量在哪里被赋值?
这个全局符号的定义在那里?
这个函数在源文件中的那个地方?
那些函数调用了这个函数?
这个函数调用了那些函数?
信息 "out of space" 从哪来?
这个源文件在整个目录结构中处于什么位置?
哪些文件包含这个头文件?

Cscope 在第一次被使用在指定的源文件时会建立一个符号的数据库。接下来被调
用时,cscope 仅仅重建那些被改动或者新文件相关的数据库。那些没有被改动的
文件相关的数据库会被直接复制使用。这是的重建数据库要比第一次运行快许多。

当 cscope 被一般的调用时,你会得到一个全屏幕的选择窗口。你可以输入以上
问题中的一个。然而,一旦找到一个匹配你必须进入一个文本编辑器来查看和编辑
匹配的文本。你无法象在 vi 中使用 Ctrl-] 或 :tag 命令那样方便的跳转。

Vim 的 cscope 界面的工作原理是:先调用 cscope 的命令行界面,然后分析其
输出结果从而找到匹配处。最终结果是:cscope 查询结果就象一般的标签一样。
你可以使用一般的标签命令 (Ctrl-] 或 :tag) 然后再用 Ctrl-T 回跳。
(注意 不过,其实你不能简单的就使用 Ctrl-] 或 :tag 来跳转到标签。在那之前
你必须重新定义映射或设定一些选项值。下面的几节会告诉你如何正确的使用
cscope 界面)

2. Cscope 相关命令                                  *cscope-commands*

*:cscope* *:cs* *:scs* *:scscope* *E259* *E262* *E561* *E560*
所有命令都是通过主命令 ":cscope" 的子项完成的。主命令最短的缩写是 ":cs"。
":scscope" 完成同样的功能的同时还可以分割窗口 (缩写: "scs").

可用的子命令有:

*E563* *E564* *E566* *E568* *E569* *E622* *E623*
*E625* *E626* *E609*
add   : 添加一个新的 cscope 数据库/连接。

用法  :cs add {file|dir} [pre-path] [flags]

[pre-path] 用来通知 cscope 使用 -P [pre-path] 选项。

[flags] 可以用来给 cscope 传递额外的选项。

例子
            :cscope add /usr/local/cdb/cscope.out
            :cscope add /projects/vim/cscope.out /usr/local/vim
            :cscope add cscope.out /usr/local/vim -C

*cscope-find* *cs-find*
*E565* *E567*
find  : 查询 cscope。除了第 5 个之外的所有 cscope 查询功能都
可以使用。第 5 个是 "Change this grep pattern"。

用法  :cs find {querytype} {name}

{querytype} 和 cscope 的控制台界面以及 nvi 缺省命令
都是一致的。

0 或 s: 查找 C 符号
1 或 g: 查找定义
2 或 d: 查找本函数调用的函数
3 或 c: 查找调用指定函数的函数
4 或 t: 查找字符串
6 或 e: 查找 egrep 模式
7 或 f: 查找文件
8 或 i: 查找包含指定文件的文件

例如
            :cscope find c vim_free
            :cscope find 3 vim_free

这两个例子执行同样的查询。

            :cscope find 0 DEFAULT_TERM

在 Vim 5.1 的源代码内执行以上的命令得到一下的结果:

Cscope tag: DEFAULT_TERM
#   line  filename / context / line
1   1009  vim-5.1-gtk/src/term.c <<GLOBAL>>
#define DEFAULT_TERM (char_u *)"amiga"
2   1013  vim-5.1-gtk/src/term.c <<GLOBAL>>
#define DEFAULT_TERM (char_u *)"win32"
3   1017  vim-5.1-gtk/src/term.c <<GLOBAL>>
#define DEFAULT_TERM (char_u *)"pcterm"
4   1021  vim-5.1-gtk/src/term.c <<GLOBAL>>
#define DEFAULT_TERM (char_u *)"ansi"
5   1025  vim-5.1-gtk/src/term.c <<GLOBAL>>
#define DEFAULT_TERM (char_u *)"vt52"
6   1029  vim-5.1-gtk/src/term.c <<GLOBAL>>
#define DEFAULT_TERM (char_u *)"os2ansi"
7   1033  vim-5.1-gtk/src/term.c <<GLOBAL>>
#define DEFAULT_TERM (char_u *)"ansi"
8   1037  vim-5.1-gtk/src/term.c <<GLOBAL>>
# undef DEFAULT_TERM
9   1038  vim-5.1-gtk/src/term.c <<GLOBAL>>
#define DEFAULT_TERM (char_u *)"beos-ansi"
10   1042  vim-5.1-gtk/src/term.c <<GLOBAL>>
#define DEFAULT_TERM (char_u *)"mac-ansi"
11   1335  vim-5.1-gtk/src/term.c <<set_termname>>
term = DEFAULT_TERM;
12   1459  vim-5.1-gtk/src/term.c <<set_termname>>
if (STRCMP(term, DEFAULT_TERM))
13   1826  vim-5.1-gtk/src/term.c <<termcapinit>>
term = DEFAULT_TERM;
14   1833  vim-5.1-gtk/src/term.c <<termcapinit>>
term = DEFAULT_TERM;
15   3635  vim-5.1-gtk/src/term.c <<update_tcap>>
p = find_builtin_term(DEFAULT_TERM);
Enter nr of choice (<CR> to abort):

这样的输出显示了几类信息:
1. 标签号码 (例子中有 15 个).
2. 标签所在的行号.
3. 标签所在文件的文件名.
4. 标签的上下文 (如:全局或函数名).
5. 标签所在行的文本.

help  : 显示一个简单的帮助。

用法    :cs help

*E260* *E261*
kill  : 终止一个 cscope 连接 (或终止所有 cscope 连接).

用法   :cs kill {num|partial_name}

要终止一个连接,需要给处连接号或者部分的连接名称。部分名称可以
是数据库文件路径的任何一部分。所以要当心使用这个功能!

如果给定的连接号是 -1,那么 所 有 的 cscope 连接都会被终止。

reset : 重新初始化所有连接。

用法    :cs reset

show  : 显示当前的连接。

用法    :cs show

*:cstag* *E257* *E562*
如果你同时使用 cscope 和 ctags, |:cstag| 允许你在跳转前对两者都在查询。
例如,你可以选择先查询 cscope 数据库,如果无法找到匹配,再查询标签文件。
这种做法的次序可以通过 |csto| 的值来调整。参见 |cscope-options|。

|:cstag| 在搜索 cscope 数据库时执行和 ":cs find g" 一样的操作。

|:cstag| 在搜索标签文件时执行和 |:tjump| 一样的操作。

3. Cscope 选项                                                *cscope-options*

所有 cscope 有关的选项都可以用 |:set| 命令来设定。比较理想的做法是将这些
设定添加到你的启动文件中 (如:.vimrc)。某些 cscope 选项仅仅在 |.vimrc|
文件内才有效。在 vim 启动之后再设定它们的值没有任何效果!

*cscopeprg* *csprg*
'cscopeprg' 指定用来执行 cscope 的命令。缺省值是 "cscope"。例如:
        :set csprg=/usr/local/bin/cscope

*cscopequickfix* *csqf* *E469*
{not available when compiled without the |+quickfix| feature}
'cscopequickfix' 设定是否使用 quickfix 窗口来显示 cscope 结果。这是一组用
逗号分割的值。每个值可以代表一个 |cscope-find| 命令 (s, g, d, c, t, e, f
或 i) 加一个标志 (+, - 或 0)。
'+' 表示结果必须被添加到 quickfix 窗口中。 '-' 表示清除上次的结果,'0' 或
不存在表示不使用 quickfix。 搜索从字符串首开始直到命令第一次出现时结束。
缺省值是 "" (不使用 quickfix 窗口)。下面的值也许有用: "s-,c-,d-,i-,t-,e-"。

*cscopetag* *cst*
若设定了 'cscopetag' 选项,":tag" 命令,CTRL-] 以及 "vim -t" 都会使用
|:cstag| 而不是缺省的 :tag。也就是说,设定 'cst' 选项意味着你总同时搜索 cscope
数据库和标签文件。缺省值为关。例如:
        :set cst
        :set nocst

*cscopetagorder* *csto*
'csto' 的值决定 |:cstag| 命令查找的次序。如果 'csto' 被设为 0,cscope 数据库
先被搜索,搜索失败的情况下在搜索标记文件。如果 'csto' 被设为 1,标记文件会在
cscope 数据库之前被搜索。缺省值为 0。
例:
        :set csto=0
        :set csto=1

*cscopeverbose* *csverb*
如果 'cscopeverbose' 没有被设定 (缺省情况),当添加一个数据库时,成功与否不会
被显示。理想的情况是,你先在你的 |.vimrc| 文件中复位该选项,再添加 cscope
数据库,然后再设定之。这样,如果你在使用 vim 当中动态添加数据库,你就会被 vim
告知结果。例如:
        :set csverb
        :set nocsverb

*cscopepathcomp* *cspc*
'cspc' 的值决定显示文件路径的多少部分。在缺省值 0 的情况下整个路径都会被显
示。1 只显示文件名,而不显示路径名。其它值会显示该值表示数目的部分。例如:
        :set cspc=3
会显示文件路径的最后 3 个部分,包括文件名本身。

4. 如何在 Vim 中使用 cscope                               *cscope-howtouse*

首先你要作的是为你的源文件建立一个 cscope 数据库。最简单的做法是使用
"cscope -b" 命令。更详细的说明请查阅 cscope 的手册页。

假定你已经建立了一个 cscope 数据库,你需要将其添加 "add" 到 Vim 中来。这会
建立一个 cscope "连接" 给 Vim 来使用。你可以把这些加入到你的 .vimrc 文件里。
也可以在 vim 启动之后手动完成。例如,要添加一个 cscope 数据库 "cscope.out",
你可以这样做:

        :cs add cscope.out

你可以用 ":cs show" 命令来检查一下结果。该命令会产生类似下面的结果:

 # pid    database name                       prepend path
 0 28806  cscope.out                          <none>

备注:
因为 Microsoft RTL 的缺陷,Win32 版本只能显示 0 而不是真正的进程 ID。

一旦建立了 cscope 连接,你就可以做各种查询并得到结果。查询所用的命令是
":cs find"。例如:

        :cs find g ALIGN_SIZE

这样要做很多的打字工作,所以有些麻烦。幸运的是,我们可以通过定义快捷键
来避免过多的输入。参考 |cscope-suggestions| 可以得到一些使用的建议。

如果匹配结果只有一个,你会被自动带到该处。如果匹配结果多于一个,Vim 会显示一个
选择屏幕让你来选择一处匹配。在你跳转到新的位置后,简单的用 Ctrl-T 就可以跳会
远处。

5. 缺陷                                                       *cscope-limitations*

Vim 对 cscope 的支持紧当所在系统支持一下四个系统调用时才可用:fork(),
pipe(), execl(), waitpid()。这意味着它基本上仅限于 Unix 系统。

另外 cscope 支持在 Win32 也可以使用。更多的信息以及一个 Win32 版本的
cscope 可以在这里找到:

http://iamphet.nm.ru/cscope/index.html

同时还有几个硬性的限制:

1. cscope 的最大连接数目是 8。你还需要更多吗?

2. 在用 |:cstag| 搜索时要执行 |:tjump|,这一点是无法配置的。
(如:你不能选择使用 tselect)。

6. 建议的使用方法                                        *cscope-suggestions*

将下面的设定加入到你的 .vimrc 里 (根据你的情况调整文件路径):

        if has("cscope")
                set csprg=/usr/local/bin/cscope
                set csto=0
                set cst
                set nocsverb
                " add any database in current directory
                if filereadable("cscope.out")
                    cs add cscope.out
                " else add database pointed to by environment
                elseif $CSCOPE_DB != ""
                    cs add $CSCOPE_DB
                endif
                set csverb
        endif

我们设定了 'cscopetag',这样所有的 :tag 命令就会实际上调用 :cstag。这包括
:tag, Ctrl-], 及 "vim -t"。结果是一般的 tag 命令不仅搜索由 ctags 产生的
标签文件,同时也搜索 cscope 数据库。

有些用户也许向保留原来的标签命令,而用另外一个快捷键来执行 :cstag 命令。
例如,你可以用下面的命令将 Ctrl-_  (下划线) 映射到 :cstag:

        map <C-_> :cstag <C-R>=expand("<cword>")<CR><CR>

常用的 cscope 查询 (用 ":cs find") 包括寻找所有调用指定函数的函数以及寻找
所有出现某个指定的 C 符号的地方。你可以参照一下的映射:

        map g<C-]> :cs find 3 <C-R>=expand("<cword>")<CR><CR>
        map g<C-\> :cs find 0 <C-R>=expand("<cword>")<CR><CR>

这些对 Ctrl-] (右方括号) 和 Ctrl-\ (反斜杠) 的映射使你可以将光标移动到你想
作查询的函数或 C 符号的上方然后快速的查询 cscope 数据库。

你也可以使用下面的方式。这些映射借鉴了 Cscope 主页
(http://cscope.sourceforge.net/) 上的 Vim/Cscope 教程:

        nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>
        nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
        nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR>
        nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>
        nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR>
        nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
        nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
        nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR>

        " Using 'CTRL-spacebar' then a search type makes the vim window
        " split horizontally, with search result displayed in
        " the new window.

        nmap <C-Space>s :scs find s <C-R>=expand("<cword>")<CR><CR>
        nmap <C-Space>g :scs find g <C-R>=expand("<cword>")<CR><CR>
        nmap <C-Space>c :scs find c <C-R>=expand("<cword>")<CR><CR>
        nmap <C-Space>t :scs find t <C-R>=expand("<cword>")<CR><CR>
        nmap <C-Space>e :scs find e <C-R>=expand("<cword>")<CR><CR>
        nmap <C-Space>f :scs find f <C-R>=expand("<cfile>")<CR><CR>
        nmap <C-Space>i :scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
        nmap <C-Space>d :scs find d <C-R>=expand("<cword>")<CR><CR>

        " Hitting CTRL-space *twice* before the search type does a vertical
        " split instead of a horizontal one

        nmap <C-Space><C-Space>s
                \:vert scs find s <C-R>=expand("<cword>")<CR><CR>
        nmap <C-Space><C-Space>g
                \:vert scs find g <C-R>=expand("<cword>")<CR><CR>
        nmap <C-Space><C-Space>c
                \:vert scs find c <C-R>=expand("<cword>")<CR><CR>
        nmap <C-Space><C-Space>t
                \:vert scs find t <C-R>=expand("<cword>")<CR><CR>
        nmap <C-Space><C-Space>e
                \:vert scs find e <C-R>=expand("<cword>")<CR><CR>
        nmap <C-Space><C-Space>i
                \:vert scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
        nmap <C-Space><C-Space>d
                \:vert scs find d <C-R>=expand("<cword>")<CR><CR>

7. 如何获取 Cscope 等等                                   *cscope-info*

如果你还没有 cscope (你的编译器或 OS 没有包括 cscope),你可以从下面的地址免费
下载:
http://cscope.sourceforge.net/
这是被 SCO 以 BSD 许可发布的。

如果你想要更新的版本,你可以购买它。根据 (旧的) nvi 文档:

你可以用 $400 从 AT&T Software Solutions 购买无限制的许可的源码。
致电 +1-800-462-8146。

你还可以从 World-Wide Exptools Open Sourcean 的网页下载 cscope 13.x 及
mlcscope 14.x (多语言 cscope,支持 C, C++, Java, lex, yacc, breakpoint
listing, Ingres, 及 SDL)。网址如下:
http://www.bell-labs.com/project/wwexptools/packages.html

在 Solaris 2.x 上, 如果你有 C 编译器的许可,你也就有 cscope。两者通常位于
/opt/SUNWspro/bin

SGI 开发者也可以得到 cscope。在以下的地址搜索 cscope:
http://freeware.sgi.com/index-by-alpha.html
https://toolbox.sgi.com/toolbox/utilities/cscope/
第二个地址仅对那些 SGI toolbox 的拥有者有效。

网上还有一个旧版本的 cscope 的克隆 (叫 "cs") 。出于各种原因,Vim 不支持该
程序。

Vim cscope 界面/支持的原作者是 Andy Kahn <ackahn@netapp.com>。期间使用了
nvi cscope 界面的构架和很少的一部分代码。如果你在使用 Vim cscope 界面时
有任何问题,建议,patches, 等等,请与他联系。
*cscope-win32*
这里可以找到一个 Win32 版本的 cscope://iamphet.nm.ru/cscope/index.html

Win32 支持是 Sergey Khorev <khorev@softlab.ru> 加入的。如果你有 Win32 相
关的问题,请联系他。

vim:tw=78:ts=8:ft=help:norl:

Generated by vim2html on Mon Jul 25 12:03:47 CST 2005

Leave a Comment

Ubuntu

ubuntu.org.cn

Leave a Comment

论自由

人类应当有自由去形成意见并且无保留地发表意见,这所以成为必要的理由,已
见前章所说;这个自由若得不到承认,或者若无人不顾禁令而加以力主,那么在人的智
性方面并从而也在人的德性方面便有毁灭性的后果,这也已见前章所述;现在,作为第
二步,我们要再考查一下上述那些理由是否也同样要求着人们应当有自由去依照其意见
而行动,也就是说将其意见在生活中付诸实践,只要风险和危难是仅在他们自己身上就
不应遭到同人们无论物质的或者道德的阻碍。这句话中的但书部分当然是必不可少的。
没有人会硬说行动应当象意见一样自由。相反,即使是意见,当发表意见的情况足以使
意见的发表成为指向某种祸害的积极煽动时,也要失去其特权的。譬如有个意见说粮商
是使穷人遭受饥饿的人,或者说私有财产是一种掠夺,它们如果仅仅是通过报纸在流传
,那是不应遭到妨害的,但如果是对着一大群??聚在粮商门前的愤激的群众以口头方式
宣讲或者以标语方式宣传,那就可加以惩罚而不失为正当。不论何种行动,若无可以释
为正当的原由而贻害于他人,都可以借人们不谅的情操或者在必要时还可以借人们的积
极干涉来予以控制,在一些比较重要的情事上更是绝对必需这样。个人的自由必须约制
在这样一个界限上,就是必须不使自己成为他人的妨碍。但是如果他戒免了在涉及他人
的事情上有碍于他人,而仅仅在涉及自己的事情上依照自己的意向和判断而行动,那么
,凡是足以说明意见应有自由的理由,也同样足以证明他应当得到允许在其自己的牺牲
之下将其意见付诸实践而不遭到妨害。前章所讲的一些原则,如:人类不是不可能错误
的;
人类的真理大部分只是半真理;意见的统一,除非是对立诸意见经过最充分和最自由
的较量的结果,是无可取的,而意见的分歧,在人类还未达到远比今天更能认识真理的
一切方面之前,也并非坏事而倒是好事――所有这些原则都可以适用于人们行动的方式
,并不亚于可以适用于人们的意见。既然说当人类尚未臻完善时不同意见的存在是大有
用处,同样在生活方面也可以说:生活应当有多种不同的试验;对于各式各样的性格只
要对他人没有损害应当给以自由发展的余地;
不同生活方式的价值应当予以实践的证明,只要有人认为宜于一试。总之,在并
非主要涉及他人的事情上,个性应当维持自己的权利,这是可取的。凡在不以本人自己
的性格却以他人的传统或习俗为行为的准则的地方那里就缺少着人类幸福的主要因素之
一,而所缺少的这个因素同时也是个人进步和社会进步中一个颇为主要的因素。
在主张这条原则时必将遭遇的最大困难,不在人们须领会要用什么手段去达到一
个已经认定的目的,而在人们一般对于这个目的本身漠不关心。假若大家都已感到个性
的自由发展乃是福祉的首要要素之一;假若大家都已感到这不止是和所称文明、教化、
教育、文化等一切东西并列的一个因素,而且自身又是所有那些东西的一个必要部分和
必要条件:那么,自由就不会有被低估的危险,而要调整个人自由与社会控制二者之间
的界限也就不会呈现特别的困难,但是为患之处就在,一般的想法却很少见到个人自动
性这个东西具有什么内在价值,值得为其自身之故而予以注意。大多数的人既满足于人
类现有的那些办法(因为正是这大多数人把它们做成现在那样),便不能领会为什么那
些办法对每人说来还不够好;更甚的是,在多数道德改革家和社会改革家的心目中,自
动性并不成为他们理想的一部分,反倒在嫉恨的眼光之下被看作一种麻烦的或者还是叛
逆性的障碍物,妨碍着对于他们自己所断为对人类最好的办法的普遍接受。甚至对于象
罕波尔特(Wilhelm Von Humboldt)这样一位杰出的学者兼政治家作为一篇论文主题来
讲的一个教义,也只有很少数出自德国的人领会到它的意义――那大旨是说:“人的目
的,或说由永恒不易的理性诏谕所指令而非由模糊短暂的欲望所提示的目的,乃是要使其
各种能力得到最高度和最调和的发展而达成一个完整而一贯的整体”;因此,“每人所
应不断努力以赴特别是志在影响同人的人所应永远注视的目标,乃是能力和发展的个人
性”;而这便需要有两个东西,就是“自由和境地的多样化”;这二者一结合就发生
出“个人的活力和繁复的分歧”,而这些东西又自相结成“首创性”。①

Comments (1)