SlideShare a Scribd company logo
18/11/2016 9:29 AM
Notrace32-based Real-time Remote Debugging
Method for Optimization of Mobile OS
Geunsik Lim
http://leemgs.fedorapeople.org
Sungkyunkwan University
Samsung Electronics Co., Ltd.
2/12
Motivation
Related work
Notrace32 (Previous Research)
Notrace32 based Remote Debugging Model
TCP/IP Server & Client Model
Ring buffer Data Management
Eclipse-based GUI Client
Evaluation
Conclusion
Outline
3/12
Motivation
1) CPU와 Memory가 제한적인 임베디드 디바이스에서 애플리케이션 스토어의 등장
2) 시스템이 리부팅되거나, 시스템의 반응속도가 갑자기 느려지는 현상
3) 고객들의 디바이스에 대한 충성심 및 회사의 경쟁력을 확고히 하기 위하여 디버깅 기술이 중요함.
Too many apps
4/12
Related work
Approach Pros. Cons.
Lauterbach
GmbH의
TRACE32
• 특정시점의 기간 동안의 시
스템 변화 정보를 디버깅
• 원격으로 디버깅을 할 수 없다.
• 하드웨어가 반드시 있어야만 사
용이 가능하다.
LLDB (Low Level
Debugger on
LLVM)
• GDB 디버깅을 위한 통신규
약을 통해서 실시간으로 특
정 시점을 디버깅
• 특정 순간의 디버깅 정보만 파악
을 할 수만 있고, 특정 시점 동안
의 시스템 변화 정보를 알 수는
없다.
"GDB Tracepoints
for Linux Kernel
“ by Jim Blandy
• 특정시점의 기간 동안 시스
템 변화 정보를 디버깅 할
수 있다
• 로컬 디버깅만 가능하고, Bionic
C library기반의 안드로이드 플랫
폼을 위한 호환성을 제공하지 않
는다.
NoTrace32
(Our previous
research)
• 특정 시점동안의 시스템변
화파악 가능
• 非시스템개발자가 제대로 사용
(숙련)하려면 진입장벽이 높다.
5/12
• 실시간으로 원격으로 디버깅가능
• 진입장벽 해소를 위한 GUI 인터페이스
What is the Challenges?
6/12
Notrace32-based Real-time Remote Debugging
nt32.ko
nt32 client
(Based on gdb-tracepoints using DWARF)
debugfs
tracepoints kprobe
KernelSpaceUserSpace
TCP/IP
nt32CrossTool-chain
(ARMCortex-A9)
PERF_EVENTS
GDB
Tracepoints
sysfs
GDB(CLI) Eclipse Based GUI Client
nt32 Service Daemon
(work-queue single kernel thread)
GUI
Server
Client
Structure kprobe
Structure kretprobe
Structure pt_regs
DDD(GUI)
Append
Tracepoint
Handler using
Kprobe
NOTRACE32
TOOLCHAIN
ADB
• 이전의 연구: 파란색 네모박스
• 제안 시스템: 빨간색 네모박스
7/12
TCP/IP Server & Client Model
• Eclipse의 CDT(C/C++ Development Toolkit) 에 기반하여 Debug View를 추가.
• 코드의 Breakpoint, Watch point, Variable, Register 정보를 GUI 모드로 추적 가능.
Kernel Image
Kernel gdbserver
( nc –l 1234 )
nt32 server drives
Linux kernel
GDB-release reads
debug information
from unstripped local
copy of Kernel
Eclipse
GDB Client
Kernel Image
(vmlinux)
Kernel gdbserver
protocol over TCP/IP
GDB protocol
Host System Target System
192.168.155.20:1234
8/12
Ring Buffer for Controlling Mass Data
Ring Buffer
Fetch data
Add new data
Release old data
This image shows a partially full buffer basically.
This image shows a full buffer with two
elements having been overwritten to
keep the maximum size of the memory.
6 7 8 9 10 A B 5
1 2 3 4
END START
ENDSTART
9/12
Server Client
Android
Emulator
Linux Desktop
WiFi
3G Network
Wired LAN
nt32.ko
nt32.ko
nt32.ko
nt32
Client
TCP/IP
DWARF
debugging
symbols
DWARF
debugging
symbols
DWARF
debugging
symbols
• 실험환경: Ubuntu 12.04 LTS가 설치된 리눅스 데스크탑 환경에서 안드로이드
모바일 디바이스에 접속을 한 후에 원격 분석 수행
Evaluation 1/3
10/12
Evaluation 2/3
• http://www.youtube.com/watch?v=3rUUJc3EMEw&list=UUQQy-pib6naOe5BCeXB-OsQ&index=1&feature=plcp
11/12
• Eclipse에서 GDB를 연동하여 커널 디버깅시에 아래와 같이 GDB콘솔에서 Tracdpoint관련 GDB명령을
수행하도록 한다.
(1)
(2)
(3)(4)
Evaluation 3/3
12/12
Conclusion and Future work
• 본 논문의 아이디어는 운영체제 레벨의 동적 적재 소프트웨어 솔루션이므로, 안드로이
드 플랫폼의 어떠한 추가적인 수정도 필요로 하지 않는다.
• TCP/IP기반으로 임베디드 디바이스들을 실시간으로 특정 시점 동안 원격으로 디버깅
가능하다.
• NOTRACE32의 진입장벽 최소화를 위해 Eclipse 기반의 Tracing GUI 클라이언트 지원
한다.
• 오픈소스로 릴리즈 하였으므로, http://notrace32.googlecode.com/ 에서 소스코드
및 바이너리 파일들을 다운로드하여 자유롭게 추가적인 연구가 가능하다.
• 메모리뿐만 아니라 CPU도 실시간 디버깅을 할 수 있도록 PMU (Performance
Monitoring Unit)의 지원을 확장하면, CPU와 캐시 정보까지 실시간으로 디버깅이 가능
할 것이다.
13/12
14/12
BACKUP SLIDES
In Case We Have More Time…
15/12
Eclipse & GDB 연동 작업 : Eclipse 3.7.2(Indigo) C
• C/C++코드의 디버깅을 위해서는 Eclipse CDT 버전을 다운로드해야함.
(2)
(1)
16/12
Eclipse & GDB 연동 작업 : zylinCDT 플러그인 설치
• Eclipse에서 gdb-release을 연동하기 위하여 Eclipse 실행후에 [Help] – [ Install New Software] 메뉴에
서 zylinCDT 플러그인 다운로드
(1)
(2)
(3)
17/12
Eclipse & GDB 연동 작업 : New C Project 생성
• [File] – [New] – [ C Project 생성]메뉴에서
– Project name: hello
– Project type: Executable – Empty Project
– Toolchain: Linux GCC
– 를 선택하여 C 프로젝트를 생성하도록 한
다.
(1)
(2)
(3)
(4)
18/12
Eclipse & GDB 연동 작업 : Cross 컴파일러 셋팅
• ARM용 바이너리를 생성되도록 크로스 툴체인 경로를 셋팅하도록 한다.
(1) (2) (3)
(2)
(2)
19/12
Eclipse & GDB 연동 작업 : 빌드 및 실행 테스트
• [Project] – [Build Project]을 클릭하여 ARM용 바이너리를 빌드하도록 한다.
(1)
(2)
(3)
20/12
Eclipse & GDB 연동 작업 : Eclipse에서 GDB 실행
• [Run] - [Debug AS…] – [ Debug
Configurations]을 선택한다.
(1)
(2)
21/12
Eclipse & GDB 연동 작업 : Eclipse에서 GDB 실행
• [Debugger]탭메뉴에서 컴파일해놓은 gdb-
release 명령은 연결시킨다.
(1)
(2)
(3)
* mi: Machine Interface
22/12
Eclipse & GDB 연동 작업 : Eclipse에서 GDB 실행
• Gdb 실행시 환경 설정 작업을 자동으로 실행하도록 [Commands]탭의 “Run” 명령박스에 추가하도록 한
다.
(1)
(2)
(3)
(4)
23/12
1. Host Linux PC에서 trace-point 설정하기
(nt-gdb) list vfs_readdir
(nt-gdb) trace vfs_readdir ( 또는 trace fs/readdir.c:29 )
Tracepoint 1 at 0xc0958608: file fs/readdir.c, line 24.
(nt-gdb) actions
Enter actions for tracepoint 1 , one per line
End with a line saying just “end”.
>collect *file ( 또는 collect $reg)
>end
(nt-gdb)
2. Host Linux PC에서 원격접속으로 타겟보드의 ls 명령 실행하기
(nt-gdb) tstart
Target#> ls /lib/
libc.so.6 libm.so.6 lib이-2.13.so libgcc.so.1 libpthread-2.13.so librt-2.13.so
(nt-gdb) tstop
3. Host Linux PC에서 원격접속으로 타겟보드 디버깅하기
(nt-gdb) tfind
Found trace frame 0, tracepoint 1
#0 vfs_readdir (file=0x0, filler=0x163d8ae3, buf=0x18c0) at /opt/android-kernel/fs/readdir.c:23
23 {
(nt-gdb) p *file ( 또는 p $reg ; info $reg )
$1 = {f_u = {fu_list = {next = 0xe58ab780, prev = 0xc1610918}, fu_rcuhead = {next = 0xe58ab780,
func = 0xc1610918}}, . . . . 중간 생 략 . . . . . ra_pages = 32,
mmap_miss = 0, prev_pos = -1}, f_version = 0, private_data = 0x0, f_ep_links = {next =
0xe5337a5c, prev = 0xe5337a5c}, f_mapping = 0xe3da2d00}
해당 Tracepoint 정보가 없다면, “Target failed to find
requested trace frame” 정보를 출력함.
Kernel으로부터 Register정보 얻기
print
부록#: TCP/IP 원격 디버깅 (file read 트레이싱)
24/12
1. Host Linux PC에서 trace-point 설정하기
* 해석) 호출이 되는 인스터럭션 정보를 알아 내도록 해보겠습니다.
(nt-gdb) disassemble /rm tty_read
938 static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
939 loff_t *ppos)
940 {
0xc0b68c34 <+0>: 0d c0 a0 e1 mov r12, sp
0xc0b68c38 <+4>: f0 dd 2d e9 push {r4, r5, r6, r7, r8, r10, r11, r12, lr, pc}
0xc0b68c3c <+8>: 04 b0 4c e2 sub r11, r12, #4
0xc0b68c40 <+12>: 08 d0 4d e2 sub sp, sp, #8
0xc0b68c44 <+16>: 04 e0 2d e5 push {lr} ; (str lr, [sp, #-4]!)
. . . 아 래 생 략 . . .
(nt-gdb) trace *0xc0b68c34
Tracepoint 2 at 0xc0b68c34: file drivers/tty/tty_io.c, line 940..
(nt-gdb) actions
Enter actions for tracepoint 1, one per line.
End with a line saying just "end".
>collect $reg
>end
2. Host Linux PC에서 원격접속으로 타겟보드의 ls 명령 실행하기
(nt-gdb) tstart
(nt-gdb) tstop
3. Host Linux PC에서 원격접속으로 타겟보드 디버깅하기
(nt-gdb) tfind
Found trace frame 0, tracepoint 1
321 ret = file->f_op->read(file, buf, count, pos);
(nt-gdb) p $reg
$1 = void
• With a /m modifier, source lines are included (if available).
• With a /r modifier, raw instructions in hex are included.
부록#: TCP/IP 원격 디버깅 (/rm 예제)
25/12
1. Host Linux PC에서 네트웍 카드 func관련 trace-point 설정하기
(nt-gdb) trace boomerang_start_xmit
Tracepoint 1 at 0xc86df4bc: file drivers/net/3c59x.c, line 2094.
(nt-gdb) actions
> collect *dev
> end
(nt-gdb) trace drivers/net/3c59x.c:2107
Tracepoint 2 at 0xc86df509: file drivers/net/3c59x.c, line 2107.
(nt-gdb) actions
> collect ioaddr
> collect vp->cur_tx
> end
2. Host Linux PC에서 원격접속으로 타겟보드의 ls 명령 실행하기
(nt-gdb) tstart
//...wait until packet received for a long time
(nt-gdb) tstop
3. Host Linux PC에서 원격접속으로 타겟보드 디버깅하기
(nt-gdb) tfind
(nt-gdb) p *dev
(nt-gdb)
(nt-gdb) tfind
(nt-gdb) p ioaddr
(nt-gdb) p vp->cur_tx
(nt-gdb) list
2102 pr_debug("boomerang_start_xmit()n");
2103 pr_debug("%s: Trying to send a packet, Tx index %d.n",
2104 dev->name, vp->cur_tx);
2105 }
부록#: TCP/IP 원격 디버깅 (네트웍 모듈)

More Related Content

PPTX
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
PPTX
이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인
PPTX
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
PPTX
Tcp summary
PDF
병렬프로그래밍과 Cuda
PDF
[142]편광을 활용한6 dof 전현기
PDF
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
PDF
제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 기반의 Open cv 응용 사례 및 효율적인 어플리케이션 디자인
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
Tcp summary
병렬프로그래밍과 Cuda
[142]편광을 활용한6 dof 전현기
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
제 5회 Lisp 세미나 - 클로저 개발팀을 위한 지속적인 통합

What's hot (20)

PDF
[164] pinpoint
PDF
Pgday bdr 천정대
PPTX
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
PPTX
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
PPTX
Introduction to Parallel Programming
PPTX
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
PDF
[2D4]Python에서의 동시성_병렬성
PDF
Community openstack & Ceph 기반 서비스 운영 해결 방안
PPTX
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
PDF
[143] Modern C++ 무조건 써야 해?
PPTX
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
PPTX
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
PPTX
Cuda intro
PDF
Versatile tensor accelerator (vta) introduction and usage
PPTX
Pgday bdr gt1000
PDF
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
PDF
Terasort
PPTX
[조진현] [Kgc2011]direct x11 이야기
PPTX
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
PPTX
Tips and experience_of_dx12_engine_development._ver_1.2
[164] pinpoint
Pgday bdr 천정대
[박민근] 3 d렌더링 옵티마이징_nv_perfhud
제3회 오픈 로보틱스 세미나 1일차 1세션 안드로이드 App 통신
Introduction to Parallel Programming
[Foss4 g2013 korea]postgis와 geoserver를 이용한 대용량 공간데이터 기반 일기도 서비스 구축 사례
[2D4]Python에서의 동시성_병렬성
Community openstack & Ceph 기반 서비스 운영 해결 방안
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[143] Modern C++ 무조건 써야 해?
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
Cuda intro
Versatile tensor accelerator (vta) introduction and usage
Pgday bdr gt1000
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
Terasort
[조진현] [Kgc2011]direct x11 이야기
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
Tips and experience_of_dx12_engine_development._ver_1.2
Ad

Viewers also liked (20)

PPT
효과적인 임베디드 디버깅 환경구축
PPT
Ccna1v3.1 mod02
PPTX
Artigo: Escritório de advocacia e contadores
PPTX
Route Maps & Redistribution into OSPF with Route Maps
PDF
CRONOGRAMA DE CAPACITACIONES CEG 2017 - PRIMER SEMESTRE
DOCX
MY CV EKA PUTRI (1)
PPTX
DCI - Marcada para janeiro, implantação do bloco k pode ser adiada mais uma vez
PDF
Scheda Tecnica Audi A4 2016
PPTX
임베디드시스템개발 Part2
PPTX
임베디드 과제 0992021 서정원
PPTX
"Санхүүгийн үндэс" Хичээл - 8
PDF
Hyundai Tucson: listino prezzi
PPTX
Cisco 2960x switch password recovery
ODP
Network Security
PPTX
Redistribution into EIGRP
PDF
리눅스 커널 디버거 KGDB/KDB
PPTX
PPTX
EIGRP Overview
PPTX
임베디드
효과적인 임베디드 디버깅 환경구축
Ccna1v3.1 mod02
Artigo: Escritório de advocacia e contadores
Route Maps & Redistribution into OSPF with Route Maps
CRONOGRAMA DE CAPACITACIONES CEG 2017 - PRIMER SEMESTRE
MY CV EKA PUTRI (1)
DCI - Marcada para janeiro, implantação do bloco k pode ser adiada mais uma vez
Scheda Tecnica Audi A4 2016
임베디드시스템개발 Part2
임베디드 과제 0992021 서정원
"Санхүүгийн үндэс" Хичээл - 8
Hyundai Tucson: listino prezzi
Cisco 2960x switch password recovery
Network Security
Redistribution into EIGRP
리눅스 커널 디버거 KGDB/KDB
EIGRP Overview
임베디드
Ad

Similar to Remote-debugging-based-on-notrace32-20130619-1900 (20)

PDF
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
PDF
ADB Backup 관련 연구
PDF
android stuff1
PPTX
DEVIEW-FULL-감독판.pptx
PDF
JVM_트러블슈팅.pdf
PPTX
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
PPTX
Android Native Module 안정적으로 개발하기
PDF
안드로이드 와 디바이스 드라이버 적용 기법
PDF
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
PDF
(111217) #fitalk rootkit tools and debugger
PDF
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템
PDF
강좌 03 개발환경 구축
PPTX
Deview 2019 눈발자국
PPTX
cross compile
PDF
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
PDF
안드로이드 플랫폼 설명
PDF
제로부터시작하는 Git 두번째 이야기
PDF
[2012 CodeEngn Conference 07] nesk - Defcon 20th : 본선 CTF 문제풀이
PPT
programming with GDB
PDF
(120128) #fitalk android forensics 101
GDB와 strace로 Hang 걸린 Python Process 원격 디버깅
ADB Backup 관련 연구
android stuff1
DEVIEW-FULL-감독판.pptx
JVM_트러블슈팅.pdf
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
Android Native Module 안정적으로 개발하기
안드로이드 와 디바이스 드라이버 적용 기법
[2014 CodeEngn Conference 11] 이경식 - 동적 추적 프레임워크를 이용한 OS X 바이너리 분석
(111217) #fitalk rootkit tools and debugger
[2013 CodeEngn Conference 08] Homeless - Android 악성앱 필터링 시스템
강좌 03 개발환경 구축
Deview 2019 눈발자국
cross compile
[Td 2015]알아두면 핵 이득! vc++로 안드로이드 개발하기(김성엽)
안드로이드 플랫폼 설명
제로부터시작하는 Git 두번째 이야기
[2012 CodeEngn Conference 07] nesk - Defcon 20th : 본선 CTF 문제풀이
programming with GDB
(120128) #fitalk android forensics 101

More from Samsung Electronics (8)

PDF
Samsung ARM Chromebook1/2 (for Hackers & System Developers)
PPTX
Distributed Build to Speed-up Compilation of Tizen Package
PDF
load-balancing-method-for-embedded-rt-system-20120711-0940
PPTX
kics2013-winter-biomp-slide-20130127-1340
PPTX
gcce-uapm-slide-20131001-1900
PPTX
distcom-short-20140112-1600
PDF
UNAS-20140123-1800
PDF
booting-booster-final-20160420-0700
Samsung ARM Chromebook1/2 (for Hackers & System Developers)
Distributed Build to Speed-up Compilation of Tizen Package
load-balancing-method-for-embedded-rt-system-20120711-0940
kics2013-winter-biomp-slide-20130127-1340
gcce-uapm-slide-20131001-1900
distcom-short-20140112-1600
UNAS-20140123-1800
booting-booster-final-20160420-0700

Remote-debugging-based-on-notrace32-20130619-1900

  • 1. 18/11/2016 9:29 AM Notrace32-based Real-time Remote Debugging Method for Optimization of Mobile OS Geunsik Lim http://leemgs.fedorapeople.org Sungkyunkwan University Samsung Electronics Co., Ltd.
  • 2. 2/12 Motivation Related work Notrace32 (Previous Research) Notrace32 based Remote Debugging Model TCP/IP Server & Client Model Ring buffer Data Management Eclipse-based GUI Client Evaluation Conclusion Outline
  • 3. 3/12 Motivation 1) CPU와 Memory가 제한적인 임베디드 디바이스에서 애플리케이션 스토어의 등장 2) 시스템이 리부팅되거나, 시스템의 반응속도가 갑자기 느려지는 현상 3) 고객들의 디바이스에 대한 충성심 및 회사의 경쟁력을 확고히 하기 위하여 디버깅 기술이 중요함. Too many apps
  • 4. 4/12 Related work Approach Pros. Cons. Lauterbach GmbH의 TRACE32 • 특정시점의 기간 동안의 시 스템 변화 정보를 디버깅 • 원격으로 디버깅을 할 수 없다. • 하드웨어가 반드시 있어야만 사 용이 가능하다. LLDB (Low Level Debugger on LLVM) • GDB 디버깅을 위한 통신규 약을 통해서 실시간으로 특 정 시점을 디버깅 • 특정 순간의 디버깅 정보만 파악 을 할 수만 있고, 특정 시점 동안 의 시스템 변화 정보를 알 수는 없다. "GDB Tracepoints for Linux Kernel “ by Jim Blandy • 특정시점의 기간 동안 시스 템 변화 정보를 디버깅 할 수 있다 • 로컬 디버깅만 가능하고, Bionic C library기반의 안드로이드 플랫 폼을 위한 호환성을 제공하지 않 는다. NoTrace32 (Our previous research) • 특정 시점동안의 시스템변 화파악 가능 • 非시스템개발자가 제대로 사용 (숙련)하려면 진입장벽이 높다.
  • 5. 5/12 • 실시간으로 원격으로 디버깅가능 • 진입장벽 해소를 위한 GUI 인터페이스 What is the Challenges?
  • 6. 6/12 Notrace32-based Real-time Remote Debugging nt32.ko nt32 client (Based on gdb-tracepoints using DWARF) debugfs tracepoints kprobe KernelSpaceUserSpace TCP/IP nt32CrossTool-chain (ARMCortex-A9) PERF_EVENTS GDB Tracepoints sysfs GDB(CLI) Eclipse Based GUI Client nt32 Service Daemon (work-queue single kernel thread) GUI Server Client Structure kprobe Structure kretprobe Structure pt_regs DDD(GUI) Append Tracepoint Handler using Kprobe NOTRACE32 TOOLCHAIN ADB • 이전의 연구: 파란색 네모박스 • 제안 시스템: 빨간색 네모박스
  • 7. 7/12 TCP/IP Server & Client Model • Eclipse의 CDT(C/C++ Development Toolkit) 에 기반하여 Debug View를 추가. • 코드의 Breakpoint, Watch point, Variable, Register 정보를 GUI 모드로 추적 가능. Kernel Image Kernel gdbserver ( nc –l 1234 ) nt32 server drives Linux kernel GDB-release reads debug information from unstripped local copy of Kernel Eclipse GDB Client Kernel Image (vmlinux) Kernel gdbserver protocol over TCP/IP GDB protocol Host System Target System 192.168.155.20:1234
  • 8. 8/12 Ring Buffer for Controlling Mass Data Ring Buffer Fetch data Add new data Release old data This image shows a partially full buffer basically. This image shows a full buffer with two elements having been overwritten to keep the maximum size of the memory. 6 7 8 9 10 A B 5 1 2 3 4 END START ENDSTART
  • 9. 9/12 Server Client Android Emulator Linux Desktop WiFi 3G Network Wired LAN nt32.ko nt32.ko nt32.ko nt32 Client TCP/IP DWARF debugging symbols DWARF debugging symbols DWARF debugging symbols • 실험환경: Ubuntu 12.04 LTS가 설치된 리눅스 데스크탑 환경에서 안드로이드 모바일 디바이스에 접속을 한 후에 원격 분석 수행 Evaluation 1/3
  • 11. 11/12 • Eclipse에서 GDB를 연동하여 커널 디버깅시에 아래와 같이 GDB콘솔에서 Tracdpoint관련 GDB명령을 수행하도록 한다. (1) (2) (3)(4) Evaluation 3/3
  • 12. 12/12 Conclusion and Future work • 본 논문의 아이디어는 운영체제 레벨의 동적 적재 소프트웨어 솔루션이므로, 안드로이 드 플랫폼의 어떠한 추가적인 수정도 필요로 하지 않는다. • TCP/IP기반으로 임베디드 디바이스들을 실시간으로 특정 시점 동안 원격으로 디버깅 가능하다. • NOTRACE32의 진입장벽 최소화를 위해 Eclipse 기반의 Tracing GUI 클라이언트 지원 한다. • 오픈소스로 릴리즈 하였으므로, http://notrace32.googlecode.com/ 에서 소스코드 및 바이너리 파일들을 다운로드하여 자유롭게 추가적인 연구가 가능하다. • 메모리뿐만 아니라 CPU도 실시간 디버깅을 할 수 있도록 PMU (Performance Monitoring Unit)의 지원을 확장하면, CPU와 캐시 정보까지 실시간으로 디버깅이 가능 할 것이다.
  • 13. 13/12
  • 14. 14/12 BACKUP SLIDES In Case We Have More Time…
  • 15. 15/12 Eclipse & GDB 연동 작업 : Eclipse 3.7.2(Indigo) C • C/C++코드의 디버깅을 위해서는 Eclipse CDT 버전을 다운로드해야함. (2) (1)
  • 16. 16/12 Eclipse & GDB 연동 작업 : zylinCDT 플러그인 설치 • Eclipse에서 gdb-release을 연동하기 위하여 Eclipse 실행후에 [Help] – [ Install New Software] 메뉴에 서 zylinCDT 플러그인 다운로드 (1) (2) (3)
  • 17. 17/12 Eclipse & GDB 연동 작업 : New C Project 생성 • [File] – [New] – [ C Project 생성]메뉴에서 – Project name: hello – Project type: Executable – Empty Project – Toolchain: Linux GCC – 를 선택하여 C 프로젝트를 생성하도록 한 다. (1) (2) (3) (4)
  • 18. 18/12 Eclipse & GDB 연동 작업 : Cross 컴파일러 셋팅 • ARM용 바이너리를 생성되도록 크로스 툴체인 경로를 셋팅하도록 한다. (1) (2) (3) (2) (2)
  • 19. 19/12 Eclipse & GDB 연동 작업 : 빌드 및 실행 테스트 • [Project] – [Build Project]을 클릭하여 ARM용 바이너리를 빌드하도록 한다. (1) (2) (3)
  • 20. 20/12 Eclipse & GDB 연동 작업 : Eclipse에서 GDB 실행 • [Run] - [Debug AS…] – [ Debug Configurations]을 선택한다. (1) (2)
  • 21. 21/12 Eclipse & GDB 연동 작업 : Eclipse에서 GDB 실행 • [Debugger]탭메뉴에서 컴파일해놓은 gdb- release 명령은 연결시킨다. (1) (2) (3) * mi: Machine Interface
  • 22. 22/12 Eclipse & GDB 연동 작업 : Eclipse에서 GDB 실행 • Gdb 실행시 환경 설정 작업을 자동으로 실행하도록 [Commands]탭의 “Run” 명령박스에 추가하도록 한 다. (1) (2) (3) (4)
  • 23. 23/12 1. Host Linux PC에서 trace-point 설정하기 (nt-gdb) list vfs_readdir (nt-gdb) trace vfs_readdir ( 또는 trace fs/readdir.c:29 ) Tracepoint 1 at 0xc0958608: file fs/readdir.c, line 24. (nt-gdb) actions Enter actions for tracepoint 1 , one per line End with a line saying just “end”. >collect *file ( 또는 collect $reg) >end (nt-gdb) 2. Host Linux PC에서 원격접속으로 타겟보드의 ls 명령 실행하기 (nt-gdb) tstart Target#> ls /lib/ libc.so.6 libm.so.6 lib이-2.13.so libgcc.so.1 libpthread-2.13.so librt-2.13.so (nt-gdb) tstop 3. Host Linux PC에서 원격접속으로 타겟보드 디버깅하기 (nt-gdb) tfind Found trace frame 0, tracepoint 1 #0 vfs_readdir (file=0x0, filler=0x163d8ae3, buf=0x18c0) at /opt/android-kernel/fs/readdir.c:23 23 { (nt-gdb) p *file ( 또는 p $reg ; info $reg ) $1 = {f_u = {fu_list = {next = 0xe58ab780, prev = 0xc1610918}, fu_rcuhead = {next = 0xe58ab780, func = 0xc1610918}}, . . . . 중간 생 략 . . . . . ra_pages = 32, mmap_miss = 0, prev_pos = -1}, f_version = 0, private_data = 0x0, f_ep_links = {next = 0xe5337a5c, prev = 0xe5337a5c}, f_mapping = 0xe3da2d00} 해당 Tracepoint 정보가 없다면, “Target failed to find requested trace frame” 정보를 출력함. Kernel으로부터 Register정보 얻기 print 부록#: TCP/IP 원격 디버깅 (file read 트레이싱)
  • 24. 24/12 1. Host Linux PC에서 trace-point 설정하기 * 해석) 호출이 되는 인스터럭션 정보를 알아 내도록 해보겠습니다. (nt-gdb) disassemble /rm tty_read 938 static ssize_t tty_read(struct file *file, char __user *buf, size_t count, 939 loff_t *ppos) 940 { 0xc0b68c34 <+0>: 0d c0 a0 e1 mov r12, sp 0xc0b68c38 <+4>: f0 dd 2d e9 push {r4, r5, r6, r7, r8, r10, r11, r12, lr, pc} 0xc0b68c3c <+8>: 04 b0 4c e2 sub r11, r12, #4 0xc0b68c40 <+12>: 08 d0 4d e2 sub sp, sp, #8 0xc0b68c44 <+16>: 04 e0 2d e5 push {lr} ; (str lr, [sp, #-4]!) . . . 아 래 생 략 . . . (nt-gdb) trace *0xc0b68c34 Tracepoint 2 at 0xc0b68c34: file drivers/tty/tty_io.c, line 940.. (nt-gdb) actions Enter actions for tracepoint 1, one per line. End with a line saying just "end". >collect $reg >end 2. Host Linux PC에서 원격접속으로 타겟보드의 ls 명령 실행하기 (nt-gdb) tstart (nt-gdb) tstop 3. Host Linux PC에서 원격접속으로 타겟보드 디버깅하기 (nt-gdb) tfind Found trace frame 0, tracepoint 1 321 ret = file->f_op->read(file, buf, count, pos); (nt-gdb) p $reg $1 = void • With a /m modifier, source lines are included (if available). • With a /r modifier, raw instructions in hex are included. 부록#: TCP/IP 원격 디버깅 (/rm 예제)
  • 25. 25/12 1. Host Linux PC에서 네트웍 카드 func관련 trace-point 설정하기 (nt-gdb) trace boomerang_start_xmit Tracepoint 1 at 0xc86df4bc: file drivers/net/3c59x.c, line 2094. (nt-gdb) actions > collect *dev > end (nt-gdb) trace drivers/net/3c59x.c:2107 Tracepoint 2 at 0xc86df509: file drivers/net/3c59x.c, line 2107. (nt-gdb) actions > collect ioaddr > collect vp->cur_tx > end 2. Host Linux PC에서 원격접속으로 타겟보드의 ls 명령 실행하기 (nt-gdb) tstart //...wait until packet received for a long time (nt-gdb) tstop 3. Host Linux PC에서 원격접속으로 타겟보드 디버깅하기 (nt-gdb) tfind (nt-gdb) p *dev (nt-gdb) (nt-gdb) tfind (nt-gdb) p ioaddr (nt-gdb) p vp->cur_tx (nt-gdb) list 2102 pr_debug("boomerang_start_xmit()n"); 2103 pr_debug("%s: Trying to send a packet, Tx index %d.n", 2104 dev->name, vp->cur_tx); 2105 } 부록#: TCP/IP 원격 디버깅 (네트웍 모듈)

Editor's Notes

  • #3: Thread scheduling framework