일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- pinpoint
- TLS
- LLVM
- LLVM 난독화
- initial-exec
- uftrace
- v8 tracing
- linux debugging
- so inject
- pthread
- 안티디버깅
- Linux packer
- linux thread
- tracerpid
- apm
- custom packer
- LLVM Obfuscator
- android inject
- Linux custom packer
- Android
- tracing
- anti debugging
- on-stack replacement
- thread local storage
- on stack replacement
- v8 optimizing
- Obfuscator
- 난독화
- Injection
- OSR
- Today
- Total
목록Knowledge/Tracing (3)
Why should I know this?
오픈소스 uftrace(https://github.com/namhyung/uftrace)의 개발에 참여하면서, Tracing 도구를 개발하고 동시에 이용하는 입장으로서 Tracing에 대한 고찰을 정리해보고자 한다. 지난 주에 Naver에서 주최한 Pinpoint 세미나에 참석했었다. Pinpoint는 Naver에서 개발하여 공개한 오픈소스이며, APM (Application Performance Management) 도구이다. 위 그림처럼 Pinpoint는 수려한 UI를 갖추고 있다. 고품질의 UI에 걸맞게 Pinpoint는 github에서도 인기가 좋다. (https://github.com/naver/pinpoint) 8,900의 스타로 9천개 스타에 진입하고 있다. 국내 IT 대기업들은 자체적으로 ..
만약 gcc를 사용하는 중에 의도치 않게 메모리 관련 에러가 발생한 경우, gcc에서 제공하는 스펙이나 표준 스펙에서 벗어난 코딩을 했을 경우가 높다.하지만 gcc가 내재한 버그일 가능성은 여전히 존재한다. gcc의 최적화는 각 단계가 독립적으로 진행되기 때문에 이전 단계에서 발생한 버그가 차후 스텝에 영향을 미쳐이를 디버깅하는게 절망적으로 어렵게 느껴지기도 한다. 이를 gcc 측에서도 인지하고 있기 때문인지 각 단계마다 결과물을 dump하여 확인할 수 있도록 제공하고 있다. gcc는 front-end에서는 tree라는 구조체를 메인으로 사용하며, front-end가 종료되는 시점에 tree를 rtl로 변환하여 back-end에 전달한다. -fdump-tree-all; gcc front-end의 각 스텝..
-fno-inline static으로 선언된 함수들은 소스코드 상에서는 함수로 존재하지만, 바이너리에는 inline 됨. 컴파일 시에 GCC 옵션으로 이를 방지하면 tracing하기 편해짐. (참고 링크 : stackoverflow )-fkeep-inline-functionsinline function 유지 옵션. -gdwarf-2 dwarf 2이상의 format을 사용. -fdump-tree-alltree 생성 과정을 모두 덤프하여 파일로 저장 -fdump-tree-all-detailstree 생성 과정에서 발생하는 모든 event를 함께 저장 -fdump-rtl-all최적화 과정을 모두 덤프하여 파일로 저장