일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- xshell4
- ubuntu
- Listen
- spacse
- 옛날 탕수육
- 인천
- IPv6
- host key
- 출력
- 노트북 정보
- gdb tip
- 리눅스
- whatis
- hostkeyalgorithms
- 다수 클라이언트
- kdumo
- vi
- thread pid
- 디버깅
- ubuntu22.04
- 노트북 배터리 교체
- vcore
- 괌
- C
- 칼국수
- 껍질없는
- 인화여고
- core file
- 괌여행
- linux
- Today
- Total
극히 개인적이고 극히 대단하지 않은
vi 에디터로 hex모드로 에디팅 시 컬럼 수 늘이기 본문
워낙 밑바닥 코딩을 하다보니, 생성된 바이너리를 정말 맨땅에 부딪히는 느낌으로 까봐야할 때가 종종 있다.
이 경우 유용하게 쓰이는 것이 xxd 명령이다.
제일 간단한 사용방법으로 'xxd 파일이름' 을 입력하면 그 파일을 hexa모드로 덤프해서 출력한다.
폭이 좁아 보기 불편한 경우에는 -c 컬럼수 옵션을 추가하여 컬럼 수를 변경할 수 있다. (입력하지 않으면 default 16)
xxd명령은 vi에디터에서도 연결하여 사용할 수 있다.
우선 편집하고 싶은 바이너리 파일을 vi로 연다.
파일을 열면 알수없는 암호코드같은 문자열로 인하여 알아볼 수 없는 화면이 나타난다. 다른 자료에는 hexadump모드로 열기 위해 vi에 -b (binary)옵션을 줘야하는 것으로 설명하는데 굳이 -b 옵션을 주지 않아도 무방하다.
vi 에디터 상에서 %!xxd 명령을 주면 hexa 모드로 변경이 된다.
이 때 부터는 일반적인 vi 기능을 이용하여 문서를 navigate 및 편집을 할 수 있다. 조심해야 할 것은 이 상태에서 :wq를 입력하여 저장하면, 애초의 바이너리와는 다른 화면에 보이는 텍스트를 저장하게되어 애초의 바이너리는 사라진다. 왠만하면 복사를 해 놓고 수행하는 것이 안전하다.
그러면 바이너리의 일부를 변경후 저장할려면 어떻게 해야할까?
vi 에디터의 편집기능을 이용하여 원하는 자리의 값을 바꾸면된다. 예를 들어 맨 첫째 줄의 7f45 4c46을 0000 0000으로 편집한 후, %!xxd -r 명령으로 다시 바이너리 모드로 바꾼 후 :wq 명령으로 저장하면 변경사항이 바이너리에 적용된다.
vi 에서도 hexa모드로 볼 때, 컬럼 수를 늘여서 볼 수 있을까?
있다.
%!xxd -c 36
이런 식으로 변환시 -c 옵션을 주면된다.
컬럼을 키우면 임의의 스트링을 찾을 때에 줄바꿈으로 인하여 찾지 못할 확률이 줄어들고 가독성이 높아져서 좋다.
'20년차 개발자' 카테고리의 다른 글
요긴한 gdb 명령들 (0) | 2021.05.20 |
---|---|
C 디버깅용 로그 출력할 때, 자동으로 함수이름과 라인번호 출력하기 (0) | 2020.09.11 |
strace 로 프로세스 트레이스 할 때 출력문의 길이가 짧아서 곤란할 때. (0) | 2020.04.13 |
Device type별 dmidecode (0) | 2020.03.11 |
IPv6 관련한 잡다한 내용 (0) | 2019.10.31 |