728x90

gdb --args
디버깅할 프로그램에 직접 파라미터를 제공 (잘 모르겠음)

thread apply all bt
모든 스레드에 대해 백트레이스 정보를 덤프한다

gdb --batch --ex r --ex bt -e-x q --args
실행중인 프로그램이 죽을 때 벡트레이스 정보를 얻도록 한다.

run [args]
디버깅할 프로그램을 파라미터[args]와 함께 실행시킨다.

break (b)
함수에 중단점 설정

backtrace
현재 호풀 스택에 대한 백트레이스 덤프(bt)

print expr
expr값 출력

continue
프로그램 계속 실행

next
다음 줄까지만 실행, 함수 호출 시 함수 안으로 진입하진 않음

step
다음 줄까지만 실행, 함수 호출시 함수 안으로 진입

clear
중단점을 지운다

info break
중단점 정보를 보여준다

attach pid
실행 중인 프로세스를 붙여 디버그할 수 있도록 한다.

detach
프로세스 분리

list
소스코드 10줄 보여줌

728x90

'Linux system' 카테고리의 다른 글

Linux 시스템에 대한 이해 _ 2  (0) 2021.04.10
Linux 시스템에 대한 이해 _ 1  (0) 2021.04.09
728x90

저번엔 시스템 메모리에 관련된 공부를 했습니다. 오늘은 소프트웨어 관리와 하드웨어 관리, 파일시스템 관리까지 해보겠습니다.

 

소프트웨어 관리

리눅스에서 돌아가는 프로그램을 프로세스(process)라고 합니다. 프로세스는 백그라운드와 포그라운드(foreground)가 있는데, 이를 커널이 관리합니다. 리눅스 커널은 다른 프로세스들을 실행시키기 위한 초기 프로세스를 관리합니다. 초기 실행시 virtual memory에 초기 프로세스를 로드하고 이 프로세스가 다른 프로세스의 data와 code를 저장하기 위한 공간을 배정해줍니다.

 

또한 리눅스엔 초기 실행시 8가지의 권한 설정이 있습니다.

 

level 0

코드나 구조에 에러가 있을 경우 하드웨어 손상을 방지하기 위한 시스템 강제 중지모드입니다. 안드로이드의 은어로는 벽돌이라고도 부르죠. 보통 무한부팅처럼 부트로더를 통과한 후에 나는 에러들은 이 모드로 리턴되는것이 아닙니다.

부트로더가 손상된 경우 이 모드로 리턴하고, 아예 부팅모드로 접근하지 못합니다. (odin모드로는 접근 가능해서 이 모드로 복구를 합니다)

 

level 1 

가장 높은? 권한이라 할 수 있습니다. single-user mode이고 오직 관리자만 접근할 수 있습니다. 안드로이드에선 부트로더 모드라고 할 수 있겠네요. 보통 공장 초기화모드로 들어간다고 하고, 부트로더를 제외한 모든 시스템을 수정할 수 있습니다. 

 

level 2

보통 상태에서 네트워크 연결이 차단된 상태입니다. 안전모드라고 생각하시면 됩니다. 다만 아직은 X windows가 없는 콘솔상태입니다. 바이러스를 찾거나 포렌식을 할때 사용합니다.

 

level 3

level 2 상태에서 인터넷 연결이 있는 모드입니다.

 

level 4 (not used)

 

level 5

아주 가장 일반적인 모드입니다. 여러분들이 사용하시는 우분투는 서버컴이 아닌 이상 다 이 상태입니다.

multiuser와 X windows를 지원합니다. 

 

(X windows는 그래픽으로 3차원? 처럼 표현해주는 소프트웨어입니다)

 

level 6 (reboot the system)

이게 그 골때리는 무한부팅 상태입니다. 

 

참고 문서 

www.tutorialspoint.com/init-process-on-unix-and-linux-systems

 

Init process on UNIX and Linux systems

Init process on UNIX and Linux systems Init is the parent of all processes, executed by the kernel during the booting of a system. Its principle role is to create processes from a script stored in the file /etc/inittab. It usually has entries which cause

www.tutorialspoint.com

 

하드웨어 관리

부채널분석? 관련 공부를 조금 했을때 이부분 공부가 가장 골때렸습니다. 

커널의 역할은 소프트웨어와 하드웨어 사이의 브릿지라고 전에 말했습니당. 어느 장치건 리눅스 시스템에 연결하기 위해선 kernel code 안에 driver code를 삽입해야 합니다. 삽입하는 방법은 2가지가 있습니다. 

1. Drivers compied in the kernel

그냥 해당 드라이버 코드를 삽입한 커널코드를 리컴파일하는겁니다. 커널을 새로 만든다고 할 수 있고, 장비가 많아질수록 비효율적입니다. 매우!

 

2. Driver modules added to the kernel

1번 방법을 사용하다 나온 보완된 방법입니다. 커널 전체를 튀기지 않고 드라이버 코드를 커널에 삽입합니다. 또한 사용이 끝나면 커널에서 제거할 수 있습니다. 이제 대부분의 os들이 이 방법을 사용합니다. 

 

리눅스에서 device들을 Character, Block, Network 이렇게 3가지로 분류할 수 있습니다.  Character 은 모뎀이나 터미널처럼 한번에 한가지의 character 만 다룰 수 있습니다. charater을 번역을 어떻게 해야할지 모르겠슴다 :(

이와 다르게 저장소처럼 여러가지의 character들, 큰 block안에 있는 데이터들을 다룰 수 있는 장치를 Block file이라 부릅니다. 

네트워크 장치는 말 그대로 프로토콜로 소통할 수 있는 기기를 말합니다.

 

이 기기들은 (character, block, network) _(devices) 각각의 특수한 숫자를 가지고 있는 node가 만들어집니다. id card라고 보시면 됩니다. 이렇게 만들어진 node들로 software가 hardware를 사용합니다. (communicate)

 

 파일시스템 관리

 

리눅스의 장점은 여러가지의 filesystem을 지원한다는 것입니다.

 

이 모든 저장소를 VFS(virtual file system)을 이용하여 연결할(interface) 수 있습니다.

 

다음엔 재밌는 GNU Uilities에 대해 알아봅시다 :)

 

참고 서적 -Linux Command Line and Shell Scripting Bible (blum and bresnahan)

728x90

'Linux system' 카테고리의 다른 글

gdb trick  (0) 2021.09.25
Linux 시스템에 대한 이해 _ 1  (0) 2021.04.09
728x90

앞으로 최소 두달 이상 책읽을 시간이 많아져서 리버싱 엔지니어링을 집중적으로 공부하려합니다. 우선 기본기가 가장 중요하기 때문에, 리눅스 시스템에 대한 이야기를 해보고, bash-shell, env, permission, filesystem, web script, database script 등 조금식 알아가 보겠습니다. 

 

 

리눅스 시스템을 구성하는 파트는 우선

application software (컴퓨터 안의 프로그램들, elf같은것) ,

window management software,

gnu system utilities(cat, ls같은 명령어가 구현되어 있음)

Kernel,

hardware 이렇게 5가지가 있다고 볼 수 있습니다.

 

 

안드로이드 커스텀을 해보신 분들은 이해하기 쉽습니다. 보통 안드로이드 기기를 루팅하는 과정은 부트로더 언락( 이부분은 일단 생략), 부트로더 변경, 커스텀 커널 빌드, 커스텀 롬 빌드 이렇게 4개의 과정을 거쳐야 합니다. 하나라도 생략되면 진행되지 않고, 특히 부트로더, 커널, 롬 이 3개중 하나라도 에러가 난다면 그 기기는 일명 '벽돌'이 됩니다

(학생때 이걸 하다가 휴대전화 몇개를 부숴먹었는지 모르겠네요...) 

 

위 사진에서 보이는것과 같이 하드웨어와 소프트웨어를 연결해주는 부분은 Kernel입니다. 브릿지? 같은거라고 생각하셔도 될것같네요. 

커널이 하는 역할은 크게 4가지가 있습니다.

 

1. 시스템 메모리 관리

2. 소프트웨어 관리

3. 하드웨어 관리

4. 파일시스템 관리

 

2,3번은 당연히 아시겠지만 1,4번은 뭔가 뭔소린지 모르겠죠? 저도 그래요

 

시스템 메모리 관리

 

메모리엔 크게 2가지가 있습니다. physical memory와 virtual( or logical) memory 입니다. 

 

(메모리와 램을 혼돈하면 안될것같아요. 램은 RAM, 즉 random-access memory 로서 메모리의 하나의 종류입니다.)

 

 가상 공간에 있는 정보를 실제 메모리로 swap해주면서 시스템이 실제 메모리보다 더 많은 공간이 있는것처럼 인식하도록 합니다. (그래서 swap공간이라 부릅니다. swap space는 하드 디스크에 존재합니다)

 

리눅스 어플리케이션이 작동할때 swapping이라는 개념을 알아야 합니다.

 

메모리 공간의 블럭들은 page(프레임)라는 단위로 구분됩니다. kernel은 각각의 page(메모리 공간)들을 physical memory(RAM) 또는 swap space(저장공간)에 저장합니다. 이때 어떤 page가 현재 ram에 위치해있고 어떠한 page가 swap space에 swapped out 됐는지 table(memory map)에 기록합니다. 이때 커널은 어떤 메모리 page공간이 사용되고 있는지 기록하고, 일정 기간동안 사용되지 않은(not been accessed for a period of time) 공간을 가져옵니다(copies).

이때, copy하는 동작을 swapping out이라고 표현합니다.

 

 

swap out된 메모리 프레임을 사용하려면, physical memory에 swap out을 통해 공간을 만들고, 원하는 메모리 프레임을 swap space에서 swap in 해야 합니다.  

다음같은 메모리 구조로 리눅스에서 프로그램이 돌아갑니다. 확실히 깊게 알아볼수록 제가 몰랐던게 너무 많네요. 이 swapping에서 ASLR이나 pie같은 보호기법과의 관계는 좀더 후에 알아보고, 내일은 소프트웨어 관리하드웨어 관리에 대해 공부해보겠습니다.

 

++또한 자료 첨부할때 저작권 문제가 있어 구글, 카카오광고는 이제 내리겠습니다 :)

 

참고 자료

www.qnx.com/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.ide.userguide%2Ftopic%2Fmemory_AboutVirtualMem_.html

 

Help - Eclipse SDK

 

www.qnx.com

www.cs.uic.edu/~jbell/CourseNotes/OperatingSystems/9_VirtualMemory.html

 

Operating Systems: Virtual Memory

Figure 9.13 - Page-fault curve for FIFO replacement on a reference string. There are a number of page-buffering algorithms that can be used in conjunction with the afore-mentioned algorithms, to improve overall performance and sometimes make up for inheren

www.cs.uic.edu

참고 서적 -Linux Command Line and Shell Scripting Bible (blum and bresnahan)

728x90

'Linux system' 카테고리의 다른 글

gdb trick  (0) 2021.09.25
Linux 시스템에 대한 이해 _ 2  (0) 2021.04.10

+ Recent posts