본문 바로가기
Visual Studio Code

[VSCode] VSCode 디버깅 시 이진 데이터 변환 매크로

by Junk_Seo 2024. 10. 25.
반응형

1. 개요

  • 개발 관련해서 VSCode로 디버깅 시에 이진 데이터(Hex String)를 확인하고 비교해야하는 작업이 자주 있습니다.
  • Hex String 값을 1바이트(2개 문자) 단위로 "0x"와 ","를 붙여서 가공해야 하는데, 일일이 하는게 귀찮아서 vscode의 확장을 사용하여 매크로를 만들어서 처리하는 것을 정리하였습니다.
  • 예) 01020A1FED -> 0x01, 0x02, 0x0A, 0x1F, 0xED 변환

2. 확장 프로그램 설치

  • 매크로를 만들어서 사용하기 위해 설치해야 하는 확장 프로그램입니다.
  • multi-command 확장 설치
  • VSCode 디버깅 시 이진 데이터 보기로 볼수 있는 hex string 값을 복사하면 Base64 인코딩 된 값이 복사 되므로 이를 다시 Hex String 으로 변환하기 위한 Base64 확장 프로그램을 설치 합니다.

3. settings.json에 매크로 정의

  • 확장 프로그램을 설치 했다면 이제 매크로를 settings.json에 정의합니다.
    • "ctrl + ," 로 설정 창을 열고 오른쪽 상단의 "설정 열기(JSON)" 아이콘 클릭
    • "ctrl + shift + P" 로 명령 팔레트에서 "settings.json"을 입력하여 열기
  • 매크로 정의
    {
        "multiCommand.commands": [
            {
                "command": "multiCommand.add0xToHexString",
                "sequence": [
                    {
                        "command": "editor.action.insertSnippet",
                        "args": {
                            "snippet": "${TM_SELECTED_TEXT/([0-9a-fA-F]{2})/0x$1, /g}"
                        }
                    }
                ]
            }
        ],
    }

4. 단축키(키 바인딩) 설정

  • 매크로를 정의 했으면 이제 단축키(키 바인딩)을 설정합니다.
    • ctrl + k, ctrl + s(Windows)로 바로가기 키를 열고 오른쪽 상단 "바로가기 키 열기(JSON)" 아이콘 클릭
  • 단축키(키 바인딩) 설정
    [
        {
            "key": "ctrl+alt+h",
            "command": "multiCommand.add0xToHexString",
            "when": "editorTextFocus"
        },
        ...
    ]

5. 예제

  • 여기 까지 왔다면 이제 모든 준비는 완료되었습니다.
  • 이제 간단한 예제로 사용법을 확인합니다.
  • 소스
    #include <stdio.h>
    #include <string.h>
    
    
    int main(int argc, char **argv)
    {
        int nResult = 0;
        char szBinData1[16] = {
            0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10
        };
        char szBinData2[16] = {
            0x10, 0x0F, 0x0E, 0x0D, 0x0C, 0x0B, 0x0A, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01
        };
    
    
        nResult = memcmp(szBinData1, szBinData2, 16);
        if (0 == nResult)
        {
            printf("OK \n");
        }
        else 
        {
            printf("Not OK \n");
        }
    
    
        return 0;
    }
  • Makefile
    CC = gcc
    CFLAGS = -Wall -g
    
    .c.o:
    	$(CC) -c $(CFLAGS) $(INCS) $<
    
    TARGET = test
    SRCS = main.c
    OBJS = $(SRCS:.c=.o)
    INCS = -I./
    
    all: $(TARGET)
    
    $(TARGET): $(OBJS)
    	$(CC) -o $@ $<
    
    clean:
    	rm -rf *.o $(TARGET)
  • 소스는 단순히 배열에 바이너리 데이터를 저장하고 비교해보는 코드입니다.
  • 해당 소스를 빌드하고 디버깅을 진행합니다.
  • VSCode에서 빌드와 디버깅하는 방법 아래 페이지에서 설명하고 있습니다.
 

[VSCode] VSCode Remote-SSH 원격 빌드 및 디버깅

1. 개요tasks.json과 launch.json 파일 설정하여 원격 빌드 및 디버깅에 대한 내용을 정리합니다.tasks.json 파일에 명령을 정의하여 Makefile을 빌드하도록 합니다.launch.json 파일에 명령을 정

junk-s.tistory.com

 

  • 디버깅
  • 오른쪽 memory.bin 의 바이너리 데이터를 복사하면 Base64인코딩 된 데이터가 복사됩니다.
  • 이를 다시 Hex String으로 변환을 위해 Base64 확장 프로그램 단축키 "Ctrl + k, Ctrl + 7" 을 사용합니다.

  • 이제 Hex String을 매크로를 사용하여 가공합니다.
  • 이제 제가 원하던 형식의 포맷으로 변경되었네요.
  • 감사합니다.
반응형

'Visual Studio Code' 카테고리의 다른 글

[VSCode] VSCode Remote-SSH 원격 빌드 및 디버깅  (0) 2024.03.01