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 사용법에 대해서~~
'Reverse engineering > 리버싱 분석 강의 정리' 카테고리의 다른 글
리버싱#1 - segmentation fault 에러 해결하기! (0) | 2021.03.01 |
---|---|
리버싱#1 - gdb 명령어 사용하는 방법! (0) | 2021.03.01 |
리버싱#1 x86 어셈블리 소개 (0) | 2021.02.25 |
리버싱#1 어셈블리 기본!! (0) | 2021.02.19 |
리버싱#1 아키텍처 이해하기 (시스템 동작 원리) (0) | 2021.02.19 |
댓글