본문 바로가기

Developing

[gef-pprint-register] gef plugin 개발일지 #1

gef는 정말 좋은 gdb extension이다. 여러 기능들을 색깔별로 잘 포맷하여 보기 쉽게 나타내주는 플러그인으로, 예전에 gdb-peda를 사용하다가 gef로 갈아타게 되었다. 그 중 gef의 registers는 현재 어떤 레지스터가 변했고, (만약 유효한 메모리 영역을 참조한다면) 그 메모리는 무엇인지며, Data 영역인지 Code 영역인지에 따라 Instruction, 혹은 Printable Ascii string으로 포맷해주는 아주 혜자스러운 기능이다.

편안한 색깔놀이

그러나, 며칠 전의 글에서도 살짝 언급했듯이 SIMD 레지스터를 인식하지 못하고, Formatting 혹은 Type casting에 한계가 있다.

그런 레지스터는 없습니다!

Hexadecimal로 이루어진 레지스터의 값을 decimal하게 보고 싶거나, float, double 등의 부동소수점 형식으로 관찰하기 위해서는 추가적인 작업이 필요하다. 이런 불편함에 기인해 gef에 추가적으로 장착할 수 있는 플러그인을 개발하고자 한다.

궁극적인 목표는 다음과 같다.

  • SIMD register를 확인할 수 있을 것.
  • Formatting 및 Slicing이 자유로울 것. (아래 예시처럼)
    • PIE offset 하위 1.5byte를 체크하기 위해 $rip[1.5:] 와 같은 형태로 Slicing이 되게 만들고자 한다.
    • 256bit의 ymm register를 8개의 integer로 보기 위해 $ymm0:u32 처럼, Python type annotation을 적용하여 Formatting을 하게 할 것이다.
  • 기존 gef의 registers 명령어와 보이는 형태에 큰 차이가 없어야 한다.

부족한 실력이지만 하나하나씩 만들어가며 배우고자 한다. (개발 현황은 아래 레포에서 확인할 수 있다.)

 

혹시 프로젝트에 대해 더욱 좋은 아이디어가 있거나, 우연히 지나가다가 많이 불편한 코드 디자인 패턴을 발견했을 경우 주저하지 말고 PR이나 Issue를 남겨서 을 꾸짖어 주시면 정말로 감사하겠습니다.

https://github.com/Aplace0927/gef-pprint-register

 

GitHub - Aplace0927/gef-pprint-register: gef extension to print register "prettier", including SIMD registers pretty-print and v

gef extension to print register "prettier", including SIMD registers pretty-print and value casting to primitive data types. - GitHub - Aplace0927/gef-pprint-register: gef extension to pr...

github.com