프로그래밍/리눅스 프로그래밍 51

[GDB] shared library debug symbol loading

https://stackoverflow.com/questions/30281766/need-to-load-debugging-symbols-for-shared-library-in-gdb/66562021#66562021 Need to load debugging symbols for shared library in GDB I am using GDB to debug a program that uses libpthread. There is an error happening in pthread_create and need to step into that function. Unfortunately when I am debugging my program, it does not... stackoverflow.com 요약 ..

[Debugging] Linux application debugging

개요 linux에서 C++로 개발된 application을 실행 할 때 Debugging하는 방법을 알아보겠습니다. 목차 ... 실행 전 연결된 library 확인 리눅스에서 현재 실행 전 프로세스에 로딩될 라이브러리를 확인하기 위해 여러 가지 방법을 사용할 수 있습니다. 다음은 그 중 몇 가지 방법입니다: ldd ldd 명령어는 실행 파일에 대한 종속 라이브러리를 출력합니다. 실행 중인 프로세스의 실행 파일을 찾아서 `ldd`를 사용하여 어떤 라이브러리가 연결되었는지 확인할 수 있습니다. ldd /path/to/executable 이 방법은 실행 파일에 대한 경로를 알고 있어야 하며, 현재 로딩된 라이브러리와 실행 시 로딩될 라이브러리 사이에 차이가 있을 수 있음에 유의해야 합니다. nm nm 명령어는..

[linux] netfilter 소개 및 동작 방식

개요 linux의 netfilter가 무엇인지 알아보겠습니다. netfilter란? Netfilter는 리눅스 커널에서 네트워크 패킷을 처리하는 프레임워크입니다 전체 구성도 https://en.wikipedia.org/wiki/Netfilter 에 잘나와 있습니다. netfilter의 동작 구조 5개의 chain과 5개의 table을 사용하여 packet을 제어 합니다. 좀더 풀어서 설명하면 각 chain에 여러개의 tabledmf 순차적으로 적용하여 packet을 제어 하는 것입니다. chain 사용자에게 Hook을 걸수있는 point를 제공하니다. 각 chain에 대한 설명 종류 설명 PREROUTING 이 chain은 패킷이 커널을 통과하기 전, 즉 데이터링크 계층과 네트워크 계층 사이에서 작동합니..

[Hook ] LD_PRELOAD

개요 LD_PRELOAD가 무엇인지 알아보겠습니다 용도 "Hooking" 용도로 사용됩니다. LD_PRELOAD는 Linux 및 Unix 계열 시스템에서 사용되는 환경 변수로서, 프로그램이 실행되기 전에 특정 동적 라이브러리를 먼저 로드하도록 지시합니다. 이를 통해, LD_PRELOAD에 명시된 라이브러리의 함수가 다른 동일한 이름의 함수보다 먼저 호출됩니다. 사용법 1. overrride할 함수를 포함하는 shared library를 생성 이 library에는 hooking할려는 함수와 동일함 이름및 paramter를 가져야 합니다. 2. shared library compile 공유 라이브러리를 컴파일하고 .so 파일을 생성합니다. 3. LD_PRELOAD를 사용하여 실행 환경 변수 LD_PRELOA..

[stress] stress 사용법

개요 linux에서 부하 테스트를 하기위해서 대부분 stress라는 tool은 사용합니다. 이에 대하여 어떻게 사용하는지 알아보겠습니다. stress 옵션 Usage: stress [OPTION [ARG]] ... -?, --help show this help statement --version show version statement -v, --verbose be verbose -q, --quiet be quiet -n, --dry-run show what would have been done -t, --timeout N timeout after N seconds --backoff N wait factor of N microseconds before work starts -c, --cpu N spawn..

[linux] libc 와 glibc 와 libstdc++ 와 gcc의 관계 정리

개념 정리 libc 최초의 libc, 이것이 원래의 고대 표준 라이브러리 구현체입니다. 현재는 libc는 "표준 C 라이브러리"를 말하는 대 명사처럼 사용 됩니다. glibc glibc는 GNU에서 만든 libc 입니다. glibc는 리눅스 시스템에서 가장 저수준의 API이며 거의 모든 runtime library가 glibc에 의존합니다. 예를 들면 c코드에서 fopen 함수를 사용하면 시스템에서 sys_open이 트리거 되고 중간 처리를 해주는 것이 glibc입니다. glibc 자체는 시스템 호출을 캡슐화하는 것 말고도 문자열, malloc, linuxthread, locale, signal등과 같은 상위 레벨 응용 프로그램에 필요한 기능을 제공합니다 libc++ libc++는 Clang 프로젝트에서..

[리눅스] thread 및 process에 CPU Core 할당 하기

사용시기 1. 실행하는 프로세스와 관련된 인터럽트가 특정 CPU 코어에서만 트리거됨(IRQ Affinity라고 하죠.) 2. 프로세스가 여러 CPU 코어에 옮겨 다니면서 실행할 때 요구되는 오버헤드(마이그레이션)을 최소화하자 - 고성능을 내기 위한 프로그램을 구현 할 때 종종 사용 됩니다. 필수 define #define _GNU_SOURCE 헤더 #include // process에 CPU를 할당 할때 사용 #include // thread에 CPU를 할당 할때 사용 process에 CPU 할당 void set_cpu(int core_id) { const pid_t pid = getpid(); // CPU 정보 초기화 cpu_set_t cpuset; CPU_ZERO(&cpuset); // CPU 정보에..

tcpreplay-edit 사용법 정리

개요 tcpreplay-edit 사용법을 정리 합니다. tcpreplay-edit 란? pcap파일을 변조하여 다시 쏘기 위한 툴 입니다. 설치 #sudo apt-get install tcpreplay 사용법 사이트 https://tcpreplay.appneta.com/wiki/tcpreplay-edit-man.html IP 변조 tcpreplay-edit -i ens192 --srcipmap=1.1.1.1:2.2.2.2 --dstipmap=3.3.3.3:4.4.4.4 test.pcap --srcipmap="pcap에 사용된 src ip":"공격쏘는 장비 IP로 변경" --dstipmap="pcap에 사용된 dst ip":"Host IPS가 설치된 장비 IP로 변경" Port 변조 tcpreplay-ed..