Ruby Marshal 바이너리 파일을 읽는 C++ 프로그램을 개발 중



Ruby의 Marshal(직렬화)된 포맷 바이너리를 읽어서 출력하는 C++ 프로그램을 만들고 있다.

몇몇 루비 토큰(Ruby 자료형을 구분하는 1개의 문자)들은 아직 처리하지 못했다. 대표적으로 USER_DEF 토큰이 그렇다.

토큰 정보는 아래 링크에서 많은 도움을 얻었다.

https://docs.ruby-lang.org/en/2.1.0/marshal_rdoc.html


아래는 C++ 출력 결과이다.

Start reading "marshals/marshal/game_system_instance.rxdata"
object of class Game_System
  :@encounter_disabled
  false
  :@magic_number
  66
  :@timer
  99
  :@save_count
  77
  :@map_interpreter
  object of class Interpreter
    :@wait_count
    0
    :@depth
    0
    :@branch
    {
    }
    :@message_waiting
    false
    :@child_interpreter
    nil
    :@event_id
    0
    :@button_input_variable_id
    0
    :@main
    true
    :@move_route_waiting
    false
    :@map_id
    0
  :@menu_disabled
  false
  :@message_frame
  88
  :@save_disabled
  false
  :@battle_interpreter
  object of class Interpreter
    :@wait_count
    444
    :@depth
    0
    :@branch
    {
      "key"
      "value"
    }
    :@message_waiting
    true
    :@child_interpreter
    nil
    :@event_id
    222
    :@button_input_variable_id
    333
    :@main
    false
    :@move_route_waiting
    false
    :@map_id
    111
  :@message_position
  2
  :@timer_working
  false

Data 폴더 내에 있는 모든 rxdata를 읽을 수 있는지 검증된 후에는, 이 데이터를 C++에서 어떻게 다루고 관리할지 큰 고민이 필요할 것이다.

댓글