본문 바로가기

포너블 멘토링/2주차

어셈블리어 학습 (1)

학습 및 정리는 동빈 나 유튜브를 참조함.

https://www.youtube.com/watch?v=BMx-xsvBMtc&list=PLRx0vPvlEmdAXwJnNtKIVeC27UmwljRYA

 

1강 - 칼리 리눅스(Kali Linux) 실습 환경 구축하기

 

VM ware : 가상 머신. 우리의 운영체제 안에서 또 다른 운영체제를 실행할 수 있음.

정보보안 계통에서 많이 사용.

데비안을 기반으로 한 칼리 리눅스를 설치할 것. 오픈 소스 리눅스 OS.

기본적으로 해킹 툴들이 포함되어있음.

 

iso : 이미지 파일?

호스트 : vm웨어를 띄우는 주 운영체제

게스트 : ~~

 

강의에 나오는 것을 따라 쭉 설치한다.

 

 

2강 - 칼리 리눅스 해상도 및 한글 설정하기

 

vmware tool을 설치하라했으니 설치한다.

화면에 vmware tool이 뜨는데 우클릭해서 터미널에서 열기를 클릭하라고 한다.

그런데 버전이 달라서 안뜬다.

상단 바에서 찾아서 누른다.

그러면 강의에서는 /media/cdrom0로 가져있는데, 내껀 그렇지 않다.

그래서 상위 디렉토리로 가서 해당 경로로 가주었다.(리눅스 명령어 사용)

근데 안에 원하는 파일이 없어서 좀 헤맸는데, 바탕화면에서 vmware tool을 실행시키니까 떴다.

그리고 다시 강의를 따라 설치한다.

그런데 cp 명령어가 듣지 않는다.

강의랑 내 화면을 좀 비교해보니, 내껀 끝이 $로 끝나는데 강의는 #으로 끝난다.

뭔가 권한에 제한이 있는거 같다.

그래서 구글링을 통해 관리자 권한을 얻는 법을 따라했다.

그리고 다시 강의를 진행해서 가장 기본적인 프로그램을 따라 쳐보자...

 

 

3강 - 어셈블리어로 Hello World 출력하기

따라 치고 난 다음에 cat로 읽어보았다.

우선 파일을 만들 때, nano hello world.s 라 치면 다른 화면으로 넘어간다.

nano는 대표적인 에디터 프로그램이라 한다. 확장자는 .s 인데 어셈블리 코드라서 그렇다고 한다.

 

코드에 대한 간략히 알아보자.

data는 정보 저장 공간이다.

text는 위에서부터 순서대로 읽으면서 내려가는 소스코드 자체라는 뜻이라고 한다.

_start: 는 함수이다. c언어에서도 main함수가 가장 먼저 동작하는 것처럼 보이지만 실제론 아니라 한다.

mov는 레지스터에 값을 넣는 명령어이다.

rax, rdi 등등이 레지스터인 것 같다.

 

코드를 다 쓰고 저장하면, 실제 프로그램으로 바꾸는 작업을 해야한다.

목적 코드로 먼저 변환 다음에 실제 프로그램으로 바꾼다.

nasm -f elf64 -o helloworld.o helloworld.s 를 통해 목적코드로 바꾸고,

ld -o helloworld helloworld.o 를 통해 실행 파일로 바꾼다.

그리고 실행이 가능한 파일은 ls로 보았을 떄, 연두색이라고 한다.

 

그런데 여기서 문제가 생겼다.

helloworld.s:5: warning: label alone on a line without a colon might be in error [-w+orphan-labels]

라는 에러가 뜨면서 목적 코드로 변환이 안된다.

왠지 -f랑 -o가 확장자랑 관련이 있는거 같아서 -f 대신에 -s를 썼더니 되긴 됐다.

아마 o가 목적 코드의 확장자 이름인것 같다. object?

 

그리고 나선 또 잘 진행이 됐다.

 

그런데 ls로 열어보니 색깔이 그냥 다 흰색이다.

강의에선 종류별로 색깔이 다르게 나오는데 내껀 다 흰색이다.

그래도 일단 ./helloworld를 통해 실행해보았다.

 

실행은 잘 되었다.

엔터키 명령어가 안들어가서 그런지 바로 옆에 붙어나온다.