Linux 20

Manage multiple SSH private keys with IdentityFile (여러개의 SSH key 관리)

여러 개의 SSH key를 관리해야 할 필요가 있다. 이 때는 아래를 참고하면 된다. SSH has a per-user configuration file called ‘~/.ssh/config’ that it can use to select your private keys based on the remote user name and remote host by using wildcards. Let’s check out my ‘config’ file: IdentityFile ~/.ssh/ids/%h/%r/id_rsa IdentityFile ~/.ssh/ids/%h/%r/id_dsa IdentityFile ~/.ssh/ids/%h/id_rsa IdentityFile ~/.ssh/ids/%h/id_dsa Ide..

Linux 2023.04.19

리눅스에서 사용하는 바이너리 유틸리티

바이너리 유틸리티는 바이너리를 조작하거나 정보를 위한 프로그램들의 모임을 말하고 이런 유틸리티 들에 대해 소개를 하고자 한다. 이 글 또한, 유닉스 리눅스 프로그래밍 필수 유틸리티 책 7장에 나온 내용을 정리한 것이다. addr2line: 바이너리 파일에서 특정 주소가 어떤 파일의 어떤 라인인지 보여줌 c++filt: C++/Java 심볼 문자열을 맹글링 되기 전 문자열로 보여줌 gprof: 프로파일 정보 출력 nm: ELF 포맷 오브젝트 파일의 심볼을 보여줌 objcopy: 오브젝트 파일의 복사 / 변환 objdump: 오브젝트 파일을 업프하거나 역어셈할 때 사용 ranlib: 정적 라이브러리 내에 인덱스를 생성할 때 사용 readelf: ELF 포맷의 오브젝트 파일 정보를 보여줌 size: 오브젝트 ..

Linux 2023.04.18

ELF 바이너리 파일 포맷 구조

ELF(Executable and Linkable Format) 바이너리 포맷은 유닉스/리눅스에서 가장 흔히 사용하는 파일 포맷이다. 1. ELF 바이너리 포맷 구조 Program header table: 재배치 불가능한 ELF object (ex, 실행 바이너리) Section header table: 재배치(relocation) 가능한 object (object 파일) 2. ELF 헤더 ELF 헤더에는 어디서부터 어디까지가 program/section header인지에 대한 정보가 들어있다. readelf -h [ELF object] 명령을 실행하면 아래와 같이 헤더 정보를 읽을 수 있다. 위는 so 파일이고 object 파일일 경우 program header가 0으로 설정이 된다. 3. progra..

Linux 2023.04.18

ld linker (링커)

링킹 과정은 조각난 object 파일들을 하나의 바이너리 이미지로 합치는 과정이다. 이 과정은 결합(merge)과 재배치(relocation)로 이루어 진다. 1. 결합(merge) 여러 ELF 바이너리 포맷으로 구성된 조각난 object 파일들은 최종 바이너리 이미지로 합쳐져 하나의 ELF 실행 파일을 구성한다. ld 명령어에 넣은 인자 순서대로 각 섹션에 들어간다. 2. 재배치(relocation) 단순히 결합 과정에 합쳐진 각 섹션을 실제 코드에 맞도록 조정하는 과정이다. 위의 그림에서 Linking View는 object 파일의 형식이고 Execution View는 linking 후 최종 하나의 실행 파일의 형식을 나타낸다.

Linux 2023.04.18

gcc compiler - 2부 (마지막)

gcc compile의 1부에 이어 3. gcc 사용하여 원하는 컴파일 하기와 4. gcc를 이용한 최적화 컴파일 5. 기타 알아 두면 좋을 만한 것에 대해 설명한다. 3. gcc를 사용해 원하는 컴파일 하기 1) gcc 옵션 적용 규칙 각 옵션은 대부분 그에 상응하는 gcc 내부 변수가 있다. (gcc/options.h) -[f|W|m][옵션]은 설정이고 -[f/W/m]no-[옵션]은 해제이다. 동일 종류의 옵션은 최종 옵션의 값이 적용된다. 그룹 옵션이 존재한다. -f는 flag, -W는 warning, -m은 아키텍처 종속, 기타 나머지들이다. 하나의 옵션이 반드시 하나의 변수만을 바꾸는 것이 아니다. (ex, 그룹옵션) 2) 가장 단순한 컴파일 명령 gcc -W -Wall -O2 -o like l..

Linux 2023.04.18

gcc compiler - 1부

유닉스 리눅스 필수 유틸리티 도서 3부 (컴파일과 링킹)을 보고 정리해보고자 한다. 그 첫번째 순서로 3부 4장. gcc compiler에 대해서 알아본다. 1. 컴파일의 의미 인간이 이해할 수 있는 형식 언어 (C, C++등)로 작성된 소스코드를 CPU가 이해할 수 있는 기계어(machine instruction)로 번역하는 과정 gcc로 빌드할 대 -g 옵션을 주면 이후 objdump -S 옵션으로 생성된 결과 파일의 디버깅 정보와 함께 instruction, instruction에 대응하는 assemble 코드를 함께 볼 수 있다. $ gcc -g -o like like.c $ objdump -S like 2. 알아 두면 정말 유용한 C 소스 컴파일 과정 /usr/bin/gcc는 실제 컴파일 과정을..

Linux 2023.04.18

tmux (terminal multiplexer)

tmux는 사용자가 단일 단말기 창 또는 원격 터미널 세션 안에서 여러 별도의 터미널 세션에 엑세스 할 수 있도록 여러 가상 콘솔을 다중화하는데 상용할 수 있는 소프트웨어 애플리케이션이다. 필자는 빌드를 걸어놓고 detach 해 놓고 다른 작업을 할 때 많이 사용한다. 설치 방법 Ubuntu: sudo apt-get install tumx 최신 소스를 다운 받아서 설치 용어 session: tmux를 실행하면 1개의 sessions이 생성된다. window: tmux session 내 여러개의 window를 생성할 수 있다. pane: 1개의 window 내 여러개의 pane으로 나눌 수 있다. (분리) 기본 ctrl + b를 누른 후 키를 입력해야 한다. ctrl + b + : 는 Command Lin..

Linux 2023.04.18