2018/08

    [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

    [gdb] The GNU Debugger : 1. Introduction

    Introduction좋은 디버거는 문제를 해결하고, 프로그램을 좀 더 쉽게 개발하고 리버싱을 하는 등 다양한 방안에서 개발자에게 도움을 주는 도구 입니다. 많은 플랫폼에서 그에 맞춰 좋은 디버거들이 존재하고 개발자들은 자신에게 맞는 디버거를 사용하고 있습니다. 그 중 GDB(The GNU Debugger)는 많은 플랫폼, x86, x86-64, arm, aarch64, mips, SPARC등 다양한 아키텍처 에서 동작하는 UNIX 시스템에서 사용할 수 있는 디버거입니다. C / C++ 로 작성된 프로그램에서 사용할 수 있습니다. 처음 GDB를 공부하시는 분들이 많이 어려워 하시는게 언제 GDB를 사용해야 하는지 입니다. 디버거는 여러분들이 작성하는 프로그램에서 발생하는 문제를 해결하는데 매우 도움을 주..

    [macro] 안전한 형변환을 위한 Macro

    32bit, 64bit 환경을 고려하여 개발을 하고 있다면 형변환을 무시할 수 없습니다.정수형, 포인터형 등 다양한 환경에서 데이터형의 크기가 달라지므로 무작정적인 값 대입을 문제를 초래할 수 있습니다. 그래서 간단한 Macro를 이용해 bit 무관하게 변경할 수 있는 방법을 제시합니다. Callback 함수 등의 User data로 void *를 많이 전달합니다. 이 때 정수형 데이터를 전달하고 싶다면 아래 매크로를 참고해 전달하는 것을 추천드립니다. C언어 자료형에 관한 매우 간단한 코드라 설명은 생략하겠습니다. 123456789#ifndef __S_TYPE_CONVERSION_H__#define __S_TYPE_CONVERSION_H__ #define SINT_TO_POINTER(x) ((void ..

    [Queue] Thread 간 통신을 위한 Async Queue (비동기 큐)

    AsyncQueue라고 표현하면 뭔가 이해하기 쉽지 않습니다. AsyncQueue의 목적은 실제 Queue로 사용하기 보단 Multi-thread 환경에서 thread간 데이터 송수신을 위해 사용합니다. AsyncQueue에 대해 살펴보겠습니다. 저는 AsyncQueue를 pthread(mutex, cond) 기반으로 작성하였습니다. Header에 include되어 있는 다른 header와 source 파일은 아래 URL을 참고해주세요. https://github.com/linuxias/linux-system-programming/tree/master/DataStruct 아래 Header를 보시면 SAsyncQueue 구조체에 mutex, cond, SQueue (자체적으로 구현한 Queue) 등이 있습..

    [ps] ps로 thread 정보 확인하기

    ps를 이용해 thread 정보를 확인하고자 아래 옵션을 사용한다. -L : threads 정보를 보여주는 옵션이다. 123456$ ps -eLf.....seungha+ 2929 1 2929 0 4 09:38 ? 00:00:00 /usr/bin/gnome-keyring-daemon --daemonize --loginseungha+ 2929 1 2930 0 4 09:38 ? 00:00:00 /usr/bin/gnome-keyring-daemon --daemonize --loginseungha+ 2929 1 3042 0 4 09:38 ? 00:00:00 /usr/bin/gnome-keyring-daemon --daemonize --login.....Colored by Color Scriptercs 위 처럼 출..