일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 크롬설치
- 삼성 sw 역량테스트
- ChromeStandaloneSetup64안됨
- 로봇청소기
- chromeSetup.exe꺼짐
- 백준 14888번
- chromeSetup.exe 안됨
- 크롬 설치 안됨
- 백준 14503번
- 바로꺼짐
- 크롬설치파일꺼짐
- C++
- 연산자 끼워넣기
- Today
- Total
공대생의 개발 일기장
Background - 리눅스에서 C, C++ 작성 본문
gcc -o ex1 ex1.c 은 ex1.c에 있는 C 프로그램을 컴파일 하고 (기계어로 바꿔서) 실행 객체 파일 ex1을 생성한다.
여기서 -o ex1의 의미가 실행 가능한 파일 이름이 ex1이다 라는 의미이다.
만약 C++을 하고자 한다면 v1 ex1.cpp로 프로그램을 짜고 g++ -o ex1 ex1.cpp로 C++을 작성한다.
여기서 알아둬야 할 명령어가 바로 kill이다.
kill은 프로세스를 종료하는 것인데 kill 1234 이런식으로 사용한다.
추가적으로 Ctrl+c(^c)는 현재 화면에서 실행되고 있는 프로세스를 kill 하라는 의미이다.
cat과 xxd의 차이를 잘 알아두어야 하는데 cat은 앞서 포스팅 했다. 한번 더 설명하겠다.
cat f1이라 하면 f1 파일 안에 있는 각 byte를 출력 하는데 각 byte를 문자 값으로 표시한다.
xxd f1도 마찬가지로 각 byte안에 들어 있는 출력하는데 hexa값을 표시한다.
(아스키 코드를 기준으로 생각한다. 아스키 넘버가 각 byte에 저장되어 있는데 이를 cat은 읽고 문자로 출력하고 xxd는 hexa로 출력하는 것이다. 만약 문자값이 아닌 숫자가 들어 있는 것에 대해 cat으로 찍으라 하면 어떻게 될것인가? 이상한 값이 출력된다.)
지금까지의 일렬의 과정을 보자.
insert mode로 들어가서 사진처럼 입력해준다. 사실 나도 긴가민가 했는데 일단 입력이 되더라 이후 저장하고 command mode로 돌아온다.
사진처럼 객체 파일 ex1이 생성된 것을 확인할 수 있다. 이제 이것을 cat으로 출력해보자. cat은 문자를 출력하는 명령어 이므로 vi ex1.c에서 insert했던 내용 그대로 출력될 것으로 예상된다.
그렇다면 xxd는 어떠할까 당연히 hexa로 표현하기 때문에 16진수의 숫자로 표기될 것으로 예상된다.
음... 숫자만 표기될 줄 알았는데 옆에 같이 입력했었던 text를 출력해준다. 편리하다. (왼쪽에 있는 것은... 주소같은데 확신이 안선다. <- 주소가 맞다! 구글링 만세) 즉, 가운데 값만 xxd의 출력값이라 보면된다.
이번엔 ex1을 보자. ex1.c와는 전혀 다른 파일이다. ex1에는 기계어와 실행에 필요한 정보가 포함되어 있다.
파일이 너무 커서 head -5로 처음 다섯 라인만 출력해보자.
7f는 해당하는 문자가 없다. 그래서 '.'으로 찍힌다. 45는 E, 4c는 L, 46은 F, 그 이후의 02, 01, 00 은 해당하는 문자가 없어서 . 이 찍힌다. 이번에는 cat을 한 번 살펴보자.
이상한 기호가 막 찍혀있다. 이건 앞서 말한 것처럼 해당하는 문자가 없으면 그냥 아무거나 찍어낸 것이다.(아무거나..? 어떤 규칙이 있는지는 모르겠지만 일단 의미 없는 문자가 찍힌 것은 맞다.)
이번에 xxd를 통해 기계어에서 원하는 기계어를 찾는 과정을 보자.
vi에서는 '/찾으려는 기계어' 하면 원하는 기계어를 찾을 수 있다.
'시스템 프로그래밍 - 리눅스' 카테고리의 다른 글
System Programming - program debugging (0) | 2023.03.21 |
---|---|
System programming - file (0) | 2023.03.21 |
C, C++ 작성하기 추가 내용(2) (0) | 2023.03.09 |
C, C++ 언어 작성하기 추가내용 (0) | 2023.03.07 |
Background - vi (0) | 2023.03.06 |