Linux/Debugging & Testing
[커널분석] Architecture 별 분석을 위한 설정 (ctags & cscope)
리눅스 커널 분석 시 많이 사용하는 툴로 ctags와 cscope를 많이 사용합니다. 하지만 분석 시 다양한 architecture에 따라 동일 네이밍의 함수나 매크로 등으로 인해 분석하기 쉽지 않은데요. 쉽게, 해결할 수 있는 방법을 알려드립니다. 리눅스 커널에서 스크립트 형태로 tags와 cscope란 옵션을 제공하고 있습니다.만약 arm64를 기반으로 분석한다고 하면 아래와 같이 설정해 주세요. $ make tags ARCH=arm64 $ make cscope ARCH=arm64 내부적으로 script를 작성해 놓았기 때문에 해당 Architecture에 해당하는 코드만 분석할 수 있습니다.
[gdb] The GNU Debugger : 3. Stack 정보 분석하기
스택은 현재 프로세스가 실행 중인 코드가 어디인지 확인할 수 있기에 매우 중요한 정보라고 할 수 있습니다. gdb에서는 종료되지 않은 함수를 하나의 frame이라고 합니다. 각 프레임은 스택에 쌓여있는 함수, 아직 종료되지 않은 함수라고 보시면 됩니다. 각 프레임은 Caller와 Callee의 관계를 구성하게 되죠. 이번 예제는 아래 코드를 사용하겠습니다. #include #include void func4(int a, int b) { printf("sum : %d\n", a + b); } void func3(int a, int b) { return func4(a, b); } void func2(int a, int b) { return func3(a, b); } void func1(int a, int b..
[gdb] The GNU Debugger : 2. 중단점 설정하기
중단점 설정은 gdb에서 매우 중요한 기능입니다. 여기서는 간단한 명령어 설명을 한 후 다음에서 중단점을 사용해 분석하는 방법에 대해 설명드리겠습니다. 중단점 (Break Point) 설정하기 (break / b)중단점은 함수이름이나 코드 라인번호 등을 통해 설정할 수 있습니다. 여러분들이 중단점을 설정 후 프로그램을 실행하면 해당 위치가 만약 수행된다면 자동적으로 해당 지점에서 실행이 중단됩니다. 이 시점의 모든 정보를 여러분들이 확인할 수 있습니다. 이 중단점에서 즉 해당 상태에서 변수나 스택구조, 어셈블리 등 다양한 정보를 얻을수도 있고 여러 동작을 조작할 수도있습니다. (gdb) b sumBreakpoint 1 at 0x400570: file example1.c, line 6. 위의 예제 코드에서..
[gdb] The GNU Debugger : 1. Introduction
Introduction좋은 디버거는 문제를 해결하고, 프로그램을 좀 더 쉽게 개발하고 리버싱을 하는 등 다양한 방안에서 개발자에게 도움을 주는 도구 입니다. 많은 플랫폼에서 그에 맞춰 좋은 디버거들이 존재하고 개발자들은 자신에게 맞는 디버거를 사용하고 있습니다. 그 중 GDB(The GNU Debugger)는 많은 플랫폼, x86, x86-64, arm, aarch64, mips, SPARC등 다양한 아키텍처 에서 동작하는 UNIX 시스템에서 사용할 수 있는 디버거입니다. C / C++ 로 작성된 프로그램에서 사용할 수 있습니다. 처음 GDB를 공부하시는 분들이 많이 어려워 하시는게 언제 GDB를 사용해야 하는지 입니다. 디버거는 여러분들이 작성하는 프로그램에서 발생하는 문제를 해결하는데 매우 도움을 주..
[SOLVE] valgrind: failed to start tool 'memcheck' for platform... ': No such file or directory
valgrind source를 cross compile 하여 다른 platform에 포팅하려 할 때 발생한 문제입니다. lib, include, bin directory 모두 알맞은 경로에 설치해주고 실행하였을 때 아래와 같은 에러 문구가 나타납니다. $ valgrindvalgrind: failed to start tool 'memcheck' for platform 'arm64-linux': No such file or directory 이 경우 lib 경로 환경변수가 등록되지 않은 상태입니다.lib 설치된 경로를 VALGRIND_LIB 환경변수로 추가해주시면 문제 해결됩니다. $ export VALGRIND_LIB=/path/to/valgrind/lib 또는 .bashrc에 환경변수 추가해주셔도 됩니다.
[valgrind] Memory debugging & profiling tool
Valgrind는 리눅스 실행파일(excutable)을 디버깅하고 프로파일링할 수 있는 툴입니다. 오픈소스이며 C/C++ 로 작성된 프로그램을 디버깅하는데 매우 유용하죠. 간단한 사용법과 몇 가지 기초적인 옵션에 대해 설명드리고자 합니다. 1. 설치$ sudo apt install valgrind$ sudo apt install massif-visualizer 2. 예제 프로그램valgrind를 이용해 프로파일링 하기 전에 예제 프로그램을 하나 작성하였습니다. 코드는 아래와 같습니다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455#include #include int t..