1. 어셈블리 프로그램 "Hello, haxor!" 를 화면에 출력 

 

// vi hello.asm 

 

section .data; section 선언

msg db "Hello, haxor!",0xa; 문자열과 줄을 바꿈.

len equ $ - msg; 문자열의 길이. 여기서 $는 이곳을 의미.

section .text; 강제 section 선언, 엔트리 포인트를 EL 링커로 보내거나 

global _start; 일반적으로 로더는 _start를 엔트리 포인터로 인식

_start: 

                ; 문자열을 stdout로 쓰기

mov edx, len; 세 번째 인수(메시지 길이)

mov ecx,msg; 두 번째 인수(쓸 메시지에 대한 포인터)

mov ebx,1; 첫 번째 인수 로딩(파일 핸들(stdout))

mov eax, 4; 시스템 호출 번호(4=sys_write)

int 0x80; 커널 인터럽트를 호출하고 나가기

mov ebx,0; 첫 번째 syscall 인수 로딩 (코드에서 나가기)

mov eax,1; 시스템 호출 번호(1=sys_exit)

int 0x80; 커널 인터럽트를 호출하고 나가기 

 

// 저장하기 :wq

 

2. 어셈블링 - 오브젝트 코드를 만드는 것. 

// hello.asm를 이용하여 hello.o를 형성하는 과정.

 

nasm -f elf hello.asm

 

// nasm 명령어를 사용하기 위해선 FFmpeg와 NASM설치가 필요하다.

 

* 설치법

https://videocube.tistory.com/entry/FFmpeg-%EC%84%A4%EC%B9%98-%ED%95%B4%EB%B3%B4%EC%9E%90-CentOS-63 참고하기!!

 

mkdir ~/ffmpeg_sources

cd ~/ffmpeg_source

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg    // 혹시나 git명령어가 먹히지 않는다면 yum install git 입력!                                                                           // yum은 인터넷이 된다는 가정하에 사용 가능하다. 
 
yum install autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel                                                          // Dependencies 설치

cd ~/ffmpeg_sources

curl -O -L http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/nasm-2.13.02.tar.bz2

tar xjvf nasm-2.13.02.tar.bz2

cd nasm-2.13.02

./autogen.sh

./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"

make

make install                                                        // NASM설치(Assembler)


//

 

다시 

 

nasm -f elf hello.asm

실행 결과

// hello.o가 생긴 것을 확인할 수 있음.

 

 

3. 어셈블링 - 실행할 수 있는 링커 연결

 

ld -m elf_i386 hello.o 

 

실행 결과는

 

 

4. 어셈블링 - 실행하기

// 책에서는 ./helloHello, haxor!라고 입력한다.

하지만 실행 결과,,, 오류가 난다.. 밑에 처럼... 그래서 한참 이것저것 해보다가.

아까 본 a.out이 생각났다.

 

그래서 hello대신에 a.out을 실행시켜보겠다고 결심!

짜잔!!!! 결과값이 나오긴했다!!!!

맞는지는 사실 모른다,,,,, 그냥,, 나름대로 오류를,,해결하도록 노력했다,,^^ 휴우 자야지..ㅎㅎㅎ

 

 

// Centos를 이용한 어셈블링 끝!

+ Recent posts