티스토리 뷰
16진수 문자열을
cat x : x를 한 줄씩 출력하고,
| : 그결과를 perl 의 입력으로 넣은다음
perl -e : 뒤 에 있는 스크립트로 해석하여 출력하되,
> y: y 에 넣어달라는 것인데,
while(<>) {...} : 표준입력을 $_ 라는 변수에 한줄씩 넣어서
split : $_를 공백으로 구분하여 리스트를 만든 뒤
map hex: 각 리스트를 16진수로 해석하여 정수 리스트로 바꾸어 만들어 내고
pack 'C*': 정수 리스트의 각 값들을 아스키코드(부호없는 char)로 해석하여 하나의 스트링으로 패킹하여
print : 출력해달라
는 것입니다.
이렇게 써놓고도 마치 몇년전에 한 번 글을 쓴 것 같은 기분이 드는 것은 왠일일까요.
$ cat xhex dump 해도 같은 결과가 나오는 바이너리 y 로 만드는 펄 코드를 살펴봅시다.
eb 8b b9 ec 8b a0 ec 9d 80 20 eb 82 98 eb 8a 94
20 eb b0 94 eb b3 b4 ec 9e 85 eb 8b 88 eb 8b a4
0a ec 9e 90 ec a1 b4 ec 8b ac 20 eb 95 8c eb ac
b8 ec 97 90 0a ec 88 a0 ea b3 bc 20 ec 93 b4 20
eb 8b b4 eb b0 b0 ec 97 b0 ea b8 b0 eb a1 9c 20
eb a7 9d ea b0 80 ec a7 80 ea b3 a0 20 ec 9e 88
ec a3 a0 0a eb 8b b9 ec 8b a0 ec 9d 80 20 eb 82
98 eb 8a 94 20 eb b0 94 eb b3 b4 ec 9e 85 eb 8b
88 eb 8b a4 0a ec 95 84 ec a7 81 20 ec 82 ac eb
9e 91 ed 95 98 ea b8 b0 ec 97 90 20 ed 95 98 eb
a3 a8 20 ec a2 85 ec 9d bc 20 ed 8e 91 ed 8e 91
20 ec 9a b8 ea b3 a0 eb a7 8c 20 ec 9e 88 ec a3
a0 0a ea b7 b8 eb 8c 80 eb 8f 84 20 eb 82 98 eb
8f 84 20 eb aa a8 eb 91 90 20 eb b0 94 eb b3 b4
ec b2 98 eb 9f bc 0a
$ od -tx1 y자, 저 y 파일을 어떻게 만들것이냐..
0000000 eb 8b b9 ec 8b a0 ec 9d 80 20 eb 82 98 eb 8a 94
0000020 20 eb b0 94 eb b3 b4 ec 9e 85 eb 8b 88 eb 8b a4
0000040 0a ec 9e 90 ec a1 b4 ec 8b ac 20 eb 95 8c eb ac
0000060 b8 ec 97 90 0a ec 88 a0 ea b3 bc 20 ec 93 b4 20
0000100 eb 8b b4 eb b0 b0 ec 97 b0 ea b8 b0 eb a1 9c 20
0000120 eb a7 9d ea b0 80 ec a7 80 ea b3 a0 20 ec 9e 88
0000140 ec a3 a0 0a eb 8b b9 ec 8b a0 ec 9d 80 20 eb 82
0000160 98 eb 8a 94 20 eb b0 94 eb b3 b4 ec 9e 85 eb 8b
0000200 88 eb 8b a4 0a ec 95 84 ec a7 81 20 ec 82 ac eb
0000220 9e 91 ed 95 98 ea b8 b0 ec 97 90 20 ed 95 98 eb
0000240 a3 a8 20 ec a2 85 ec 9d bc 20 ed 8e 91 ed 8e 91
0000260 20 ec 9a b8 ea b3 a0 eb a7 8c 20 ec 9e 88 ec a3
0000300 a0 0a ea b7 b8 eb 8c 80 eb 8f 84 20 eb 82 98 eb
0000320 8f 84 20 eb aa a8 eb 91 90 20 eb b0 94 eb b3 b4
0000340 ec b2 98 eb 9f bc 0a
0000347
cat x | perl -e "while(<>){ print pack 'C*', map hex, split }" > y간단히 해석을 하자면,
cat x : x를 한 줄씩 출력하고,
| : 그결과를 perl 의 입력으로 넣은다음
perl -e : 뒤 에 있는 스크립트로 해석하여 출력하되,
> y: y 에 넣어달라는 것인데,
while(<>) {...} : 표준입력을 $_ 라는 변수에 한줄씩 넣어서
split : $_를 공백으로 구분하여 리스트를 만든 뒤
map hex: 각 리스트를 16진수로 해석하여 정수 리스트로 바꾸어 만들어 내고
pack 'C*': 정수 리스트의 각 값들을 아스키코드(부호없는 char)로 해석하여 하나의 스트링으로 패킹하여
print : 출력해달라
는 것입니다.
이렇게 써놓고도 마치 몇년전에 한 번 글을 쓴 것 같은 기분이 드는 것은 왠일일까요.
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 디버깅
- nodejs
- JavaScript
- 수선화
- 벤자민
- 대화
- 퀴즈
- TCP/IP
- OpenID
- 식물
- 클레로덴드럼
- 커피
- macosx
- perl
- 덴드롱
- url
- ssh
- Tattertools plugin
- Linux
- SVN
- writely
- 오픈소스
- VIM
- MySQL
- 킹벤자민
- BlogAPI
- Subversion
- 구근
- SSO
- tattertools
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함