본문 바로가기
Reverse engineering/리버싱 분석 강의 정리

리버싱#1 NASM(넷와이드 어셈블러) 사용법

by grey-hat hacker 2021. 2. 25.
728x90

NASM(넷와이드 어셈블러는 인텔 x86 아키텍처용 어셈블러)

 

설치

• 윈도우: http://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D 에서 다운로드 후 설치

• 리눅스(우분투 계열): apt-get install nasm

 

NASM 프로그램 구조

 

- 우분투 접속 후 root 권한을 이용하여 nasm 설치 

 

 

hello.o 는 nasm을 돌리고 나오는 오브젝트 파일이다! 그 파일을 링크 하겠다!

컴파일과 링킹하는 과정을 동시에 하겠다!

 > 결과로 a.out 파일이 생긴다!

 

 

• PUSH: 스택에 데이터를 삽입 (push 명령어는 자동으로 ESP를 4 바이트 감소 시킴) push word / dword / word

• POP: 스택에서 데이터를 꺼냄 (스택에서 4 바이트를 꺼내와 지정한 레지스터에 삽입)

 

section .text -> 지금부터 코드 영역이다 명시 해주는 것! (코드면 코드, 데이터면 데이터다!)

하면 exam.o 오브젝트 파일이 생기고 링크를 해야 실행할 수 있는 바이너리 파일이 나오게 된다. 

 

ld 가 링크를 해주는 리눅스 명령어!

--entry main 엔트리 포인트가 main 이다. 지정을 해준다. 

> a.out 파일이 생성// 리눅스에서 실행 가능한 바이너리 파일이라고 생각하면 된다. 

 

a.out 정보를 확인할 수 있다 -> 실행가능한 파일 이구나!

 

a.out을 실행해보면 segmentation fault가 나온다!

 

-> objdump를 해보면 (파일 덤프)

 

덤프 파일이란, 프로그램 디버그 또는 시스템 테스트의 목적을 위해 기록되는 파일

 

objdump -d a.out

근데 이러면 코드만 볼 수 있지 파일 돌아가는 것을 확인할 수는 없다. -> 그래서 gdb 사용

 

gdb 프로그램이 실행되는 동안 그 실행되는 내부 과정을 보여주는 도구이다!

 

그래서 다음 시간에는 gdb 사용법에 대해서~~

728x90
반응형

댓글