Thread Information Block(TIB)
FS:[0x04] Stack Base / Bottom of stack
FS:[0x08] Stack Limit / Ceiling of stack
From http://en.wikipedia.org/wiki/Win32_Thread_Information_Block
x86에선 FS, x64에선 GS에 저장
NtQueryInformationThread 함수로
TIB 주소를 얻어올 수 있음
JYP 서버 -수집
asio 서버로 수집
컨트롤러로 인증을 하면 모듈 등록을 시작한다.
컨트롤러를 통해
한 번의 시작/멈춤을 기준으로
분석 작업을 생성
38.
JYP 서버 -분석
수집된 내용을 분석하는 자식 프로세스 생성
DbgHelp.dll 의 함수들을 이용하여 분석
Process Id를 임의로 주면
실제 프로세스 없이
메모리 정보만 가지고 분석할 수 있다.
39.
SymLoadModule64
DbgHelp에 분석하려는 덤프에있는
모듈의 이름, 메모리 상 위치, 크기를 알려줌
SymGetSymFromAddr64
SymGetLineFromAddr64
StackWalk64의 결과로 부터
함수 이름과 줄 위치를 얻어옴
40.
StackWalk64
주어진 메모리 정보와
레지스터들이저장된 CONTEXT로 부터
콜스택을 분석한다.
ReadMemoryRoutine을 커스텀 버전으로 대체
StackWalk64 분석과정에서 코드 영역을 읽어 콜스택
분석에 사용하기 때문에 각 모듈의 이미지 정보도
필요하다.
그리고 더 앞으로...
넥슨라이브인프라 실의
실시간 모니터링 시스템을 통한 연계
상황별 정보 (현재 게임 상태, FPS 등)
특정 퀘스트나 맵에서 렉 유발
→ 유저 불만 발생 → 개발팀 인식
→ 서버에 상황 등록
→ 재현시 자동으로 성능 정보 수집 모님의 우주정복 계획 (?)
55.
QnA
라이브 프로파일러 JYP
게임클라이언트에 JYP 심어두기
컨트롤러 프로그램으로 시작/중지
수집한 내용을 서버로 전송 후 분석
웹 인터페이스를 통해 결과 확인