Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[18` 이현재] 최종보고서 #81

Open
lee5black opened this issue Oct 25, 2018 · 0 comments
Open

[18` 이현재] 최종보고서 #81

lee5black opened this issue Oct 25, 2018 · 0 comments

Comments

@lee5black
Copy link

Uftrace 결과보고서

2018 08/16 ~ 2018 10/25

학습 & 활동 내용

  • Git/Github 기본 부터 고급실습 (add, commit, push,PR ~ rebase, blame...등)
  • uftrace 개발환경 구성 및 실행, test 진행
  • uftrace 실습 진행
  • Git/Github 팀 실습 각자 PR 보내기 , rebase 실습
  • uftrace 고급 실습 user + kernel 사례 (usb 관련)
  • uftrace 실습 rm 명령어 tracing
  • utrace python script 사용법 실습
  • 팀별로 기여할 idea 고민 / idea 선정
  • 리눅스 기본 (ELF, PLT/GOT, 함수 호출규약 등) 학습
  • uftrace Internals / utrace의 작동원리, 내부 로직분석, 소스분석
  • 메인테이너 김남형 님과 김홍규 개발자님과 식사자리 / 이슈 및 궁금한 것들 물어보는 시간

컨트리뷰션 참가내용

이슈 1개 작성 : https://github.com/namhyung/uftrace/issues/577

설명 : uftrace의 dwarf 쪽으로 기여영역을 설정하였고, 기여 방향은 test 많이 돌려보기 > 관련 doc 작성 > test시 발생하는 버그패치 > 신규기능 추가 제안 으로 잡았음. test를 하던 도중 각각 test code가 compile 안되는 현상이 발생하였고 g++ 버젼 문제로 인하여 추가적인 옵션이 필요하다는 것을 알고 이슈를 작성하였음. 멘토님이 test code를 실행하는 예시를 확인하라고 지도 해주셔서, 확인 후 이슈를 마무리 하였고, test에 대한 doc를 작성해도 괜찮겠다는 생각을 하게되었음.

중간 중간 필기한 것들 / 잡다한 생각들

uftrace 1일차 :
https://www.evernote.com/l/Ac5N6pV6IE5GfagfQ9sDUMrcOpgRnRgo0_k/

  • Git 실습 / rebase가 필요한 이유 학습

uftrace 4일차 :
https://www.evernote.com/l/Ac47XeTl8aJD_pnAnVyM4qptq9TwRTLVIWs/

  • 컴파일러를 utrace로 tracing 할 수 있을까?
  • g++은 헤더가 없이 어떻게 자동으로 컴파일이 되는거지? g++에 기본적으로 내장된 표준 헤더는?
  • (python script 를 배우던 중) gdb script를 작성 할 수 있을까? uftrace에 같이 엮을 수 있을까?

컨트리뷰션 집중할 영역 선택하기 & 개발자님들 미팅:
https://www.evernote.com/l/Ac5DY4jkLA5CBaetT9Hz0Vprwu7txbF1GT8/

  • 새롭게 추가된 dwarf 영역 쪽 선택,
  • doc 작성 또는 버그패치, argument로 shellcode를 주어도 트레이싱이 될까? 결과는?
  • 어떤것이 need 이고 wants 일까?
  • 공유메모리에 / pipe >signal 로 하고 있음 성능문제 발생 > C/S 구조나 큰 프로그램에 대해 어떻게 tracing을 할 것인가 ?
  • function에 대한 인자 종류( 자료형)을 같이 출력하면 어떨까? (user function에 대해서도)
  • 인자가 틀렸을때 > 올바른 형식이 아닐때에 대한 오류 핸들링 / 인자 파싱을 어떻게 하는지 확인
  • 인자에 값이 너무 크거나 / 인자의 값이 없거나 에 대한 오류 핸들링
  • uftrace 에서는 dwarf를 어떻게 파싱해서 사용하는가?
  • uftrace가 가질수 있는 강점은 무엇인가? 지금 부족한점은 ?

기여 아이디어 스케치 :
https://www.evernote.com/l/Ac7gT82kkv1FKZFGxCmF8NnsqafNar2gcO8/

컨트리뷰톤 활동 종료 이후 계획

앞서 제시한 기여 방향
test 많이 돌려보기 > 관련 doc or 이슈 작성 > test시 발생하는 버그패치 > 신규기능 추가 제안
에 맞춰서 컨트리뷰션을 계속 진행하려고 함.

  • uftrace를 이용한 분석사례들 (입문가용)이 있으면 좋을 것 같다는 판단을 하여, uftrace 실습을 통해 사례가 쌓이면 관련 doc을 작성

  • test관련 doc을 작성

  • 추가적인 test case sample 제작

  • 자세히 확인 안되었지만, script 관련 bug가 아주 가끔 생긴적 있는데, 거기에 대해서 추가적인 조사

  • 유용한 uftrace script 제작

후기

너무 뻔하지만, 정말 참가만으로 많을 것을 배울 수 있었습니다.
git/GitHub에 대해서 항상 말로만 알고 실습을 해본적도 많이 없었고, GitHub에는 자기 코드만 올리는 것만 배우고 PR을 보내는 방법에 대해서도 몰랐는데 이번 컨튜리뷰톤 프로젝트에 참가하게 되어 git/GitHub의 기본부터 심화까지 배울 수 있었습니다. 가장 기억에 남았던 것은 rebase 명령어 였는데, 다른사람이 PR을 보내고 merge된 상태에서 다시 내 base를 update 하여 commit을 쌓기 위한 명령어 임을 깨달았고 멘토님이 쉽고 친절하게 설명해주셔서 이해가 잘 되었습니다.

뿐만아니라, uftrace의 프로젝트에 대해서 더 깊게 알게 되었고, uftrace를 공부하면서 리눅스의 기본 elf 파일에 대해, PLT/GOT와 uftrace가 __dl_runtime_resolve()를 Hooking하여 함수의 enty를 잡아내는 주요 로직, 함수의 호출규약등 평상시 알고 싶었던 분야에 대해서 공부할 수 있어서 재미있고 즐거웠습니다.

이론적인 공부도 좋았지만, uftrace를 통해 실습을 하는 부분이 저에게 제일 큰 관심사였고, uftrace를 활용하여 소스코드를 분석할때 (특히 rm 명령어를 분석할때) 어떤식으로 파일이 지워지고, 실제 삭제를 담당하는 함수가 콜되는 지점, 실제 삭제를 담당하는 함수의 이름, 그 함수의 내부로직들 쭉쭉 따라가는 부분이 제일 즐겁고 재미있었습니다. 혼자 다시 해보려고 했지만 쉽진 않아서, 컨트리뷰톤 이후에도 멘토님들과 연락하고 공개SW센터에 방문하여 지도 받으려고 합니다.

마지막으로 아쉬웠던 것은, 참가에 앞서 가졌던 포부보다 기여를 못한 점 입니다. PR 한번 보내는 것이 목표였는데, 개인적인 일정과 여러 사정으로 인해 기여를 크게 못한것 같아 굉장히 아쉽지만. 컨트리뷰톤 활동이 끝나더라도 원래 하기로 했던 기여 방향을 쭉 진행하고, 당당히 uftrace의 컨트리뷰터가 되고 싶습니다. 또한 uftace를 통하여 더 소스코드 분석 실력을 키우고 싶습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant