어셈블리어 및 실습 금 1,2 (314) / 금 3,4 (307) RTDCS 이 종 태

Slides:



Advertisements
Similar presentations
1 Prof. Young Jin Nam, Daegu University 컴퓨터 구조 (Computer Architecture) 명령어 세트 : 특성과 기능 남영진
Advertisements

C 언어 Sun Moon University 1 of 25 C 언어 : 강의소개 강의실 : 산 211 담당교수 : 고경철 ( 정보통신공학과 ) 사무실 : 산학협력관 105B 면담시간 : 수업후 1 시간
8장 프로그래밍 언어 8.1 프로그램이란? 8.2 프로그램 언어의 역사 8.3 프로그램 설계 절차
예외 상황 예제 개발 1실 서버팀 우상욱 소스 첨가(…).
Shellcode 작성 김영성.
CRT 뽀개기 신영진.
Part01. 시스템 해킹을 위한 기초 지식 Chapter01. 운영체제에 대한 이해
14주차 1교시 강화계획 [학습목표] 1. 강화계획의 정의를 안다 [학습내용] 1. 단순한 강화계획 2. 간헐적 강화 3. 복합 계획 4. 선택과 대응법칙 [사전학습] 강화계획이 일어날 수 있는 사례를 생각해본다.
리눅스 커널의 이해 중에서 4장. 인터럽트와 예외 이성현 네트워크 실험실.
9장 가로채기(Interrupt) Slide 1 (of 15).
4장 어셈블리 프로그램 작성의 기본 어셈블러 어셈블리 언어 요소 예제 프로그램 데이터 정의
연장근로와 야간·휴일근로 김영호 노무사 나눔 노사관계연구소 소장 연세대 일반대학원 박사 수료 고려사이버대 법학과 외래교수
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
제4장 어셈블리어.
기본 컴퓨터 프로그래밍 Lecture #6.
Lecture #12 인터럽트 Interrupt.
1. C 언어의 이해와 컴파일러 설치.
Lecture #7 어셈블리어 (4) 매크로 어셈블리어 시스템프로그래밍.
제 7 장 링커와 로더 설계.
Install & Simulation VLSI 시스템 설계
제 1 장 마이크로프로세서의 기본동작.
CPU의 이해 CPU란 무엇인가?
Lecture # 어셈블러 설계.
누구나 쉽게 즐기는 C언어 콘서트 한남대학교 컴퓨터공학과 이 재 광 교수.
2 80×86 시스템에 대한 이해.
Kasimov C언어 세미나 1st.
사용자의, 사용자에 의한, 사용자를 위한 APT.상가 분양임대관리 System 제안서
1 C 언어의 이해와 컴파일러 설치 프로그래밍 환경을 구축하자!.
Software Exploit and Kernel Protection
소프트웨어 공학 Project - 어플리케이션 만들기 ( CS App ) 최종 발표
OpenGL Project (3D 움직이는 자동차)
출처: IT CookBook, 컴퓨터 구조와 원리 2.0 제 12장
제 18 강 데이터 타입 타입, 변환, 캐스팅 shcho.pe.kr.
4장. 컴퓨터 시스템의 구성과 기능 다루는 내용 컴퓨터 분해를 통한 본체 살펴보기 컴퓨터 구성요소 컴퓨터의 기능
+ 가상 메모리 -> 물리 메모리 Selector Offset DIR Page Segmetatation
Lecture #8 어셈블리어 (5) 매크로 어셈블리어 시스템프로그래밍.
버퍼 오버플로우 시스템보안 인터넷공학전공 권영락.
Computer Architecture
프로그래밍 서울대학교 통계학과 2009년 2학기 컴퓨터의 개념 및 실습 (
리버스 엔지니어링 안녕하십니까? 리버스 엔지니어링 발표를 맡은 정창하입니다. 지금부터 리버스 엔지니어링 발표를
Chapter 06 명령어와 번지지정 방식.
제 6 장 8086 어셈블러 설계.
8086 프로세서의 구조 및 동작 방식 시스템 프로그래밍 - Lecture #2 신라대학교 컴퓨터공학과 시스템 프로그래밍.
BOF of 2.6 Kernel ! 박수완 / Su-Wan, PARK [ L1nkC] 숭실대학교 정보보호동아리 ACK
제3장 8086 프로세서의 내부구조.
제 2장 컴퓨터동작의 기본 개념.
아날로그 VS 디지탈 -. Analog Vs Digital -. 디지털 논리에 대하여 -. 메모리에 대하여
제 1장 시스템 소프트웨어의 개요.
10장. 중앙처리 장치의 명령어 다루는 내용 어셈블리 프로그램의 이해 인터럽트(interrupt) 명령어 세트 주소 지정 방식.
쉽게 풀어쓴 C언어 Express 제1장 프로그래밍의 개념 C Express.
명품 C++ 프로그래밍 1장. C++ 시작.
제1장 시스템 소프트웨어의 개요 컴퓨터시스템 및 하드웨어 구성 컴퓨터의 구성과 기능 시스템프로그램의 개요
Buffer Overflow
Computer System Architecture
Seoul National University
한신대학교 광고홍보학과 김지훈 방문 유도를 통한 관계 강화 존경 받는 기업으로써 삼성의 기업이미지 업그레이드 방안.
1. 컴퓨터 시스템 구성요소 메모리(Memory) 캐시메모리 개념 캐시메모리의 특징 적중률(hit ratio)
컴퓨팅 이해 5장 프로그래밍 언어 순천향대학교 컴퓨터공학과 하상호.
Copyrightⓒ ohta. All Rights Reserved.
제1장 정리 컴퓨터소프트웨어과 2-A반 주세호.
쉽게 풀어쓴 C언어 Express 제1장 프로그래밍의 개념 C Express.
고객의 재발견.
기술 진화와 진보.
강의교안 이용 안내 *이 책에 딸린 강의자료는 교수님의 효율적인 수업진행을 돕기 위해 만들어졌습니다.
원도우 네트워크 프로그래밍 (TCP/IP 소켓 프로그래밍)
10장. 컴퓨터 구조에 대한 세 번째 이야기 작성자: 윤성우.
제 10 장  코드 생성.
Assembly 05 방호남 07 반지훈 09 박상욱.
4-1. 명령어 형식.
제 1 강 컴퓨터의 구조.
Presentation transcript:

어셈블리어 및 실습 금 1,2 (314) / 금 3,4 (307) RTDCS. 422. 이 종 태 010-4116-1516 dksakclsk@naver.com

레지스터 CPU 안에 있는 고속 저장 장소 일반 메모리보다 훨씬 빠른 속도로 접근 종류 범용 레지스터 세그먼트 레지스터 플래그 레지스터 명령어 포인터

범용 레지스터 계산과 데이터 전송에 주로 사용 각 레지스터는 32bits 값이나 16bits 값 또는 2개의 8bits 값으로 사용 될 수 있음 구조

범용 레지스터의 크기 8bit 단위까지 세분화 가능한 레지스터 16bit로 세분화 가능한 레지스터

범용 레지스터의 용도 레지스터마다 기본적으로 가지고 있는 용도가 있음. 레지스터명 용도 EAX 곱셈과 나눗셈 연산에 사용 됨 EBX 베이스 주소를 저장 ECX 루프 카운터로 사용 됨 EDX 데이터를 저장 ESI 고속 메모리 전송에 사용 됨(Source Index) EDI 고속 메모리 전송에 사용 됨(Destination Index) EBP 스택의 베이스 포인터 저장 ESP 스택 포인터 저장

그 외 레지스터 세그먼트 레지스터 플래그 레지스터 명령어 포인터(EIP) 미리 할당된 메모리 영역의 시작 주소를 가리킴 CS – Code Segment DS – Data Segment SS – Stack Segment ES – Extra Segment 플래그 레지스터 CPU 동작을 제어하거나 연산 결과를 반영함 1일 때 설정되고, 0일 때 해제 됨 (2진수 비트로 구성) 명령어 포인터(EIP) 다음에 실행할 명령어의 주소를 가짐 새 위치로 분기할 때도 쓰임

정수의 표현 2/8/10/16 진수가 쓰임 각 진수는 문자로 표시가 가능 진수 생략 시 10진수로 간주 표현 형식 진수의 종류 [{+, –}] 숫자 [진수] 진수의 종류 예시 26, 42o, 11010011b, 0A3h … 16진수 h 10진수 d / t 8진수 q / o 2진수 b, y

식별자 프로그래머가 선택한 이름. 식별자는 변수, 상수, 프로시저 또는 코드 레이블 등에 사용된다 1~247개 사이의 문자를 사용할 수 있다 대문자와 소문자를 구분하지 않는다 첫 번째 문자는 알파벳(a~z,A~Z), _ ,@,?,$등을 사용가능 @기호는 어셈블러 기호접두사에 사용되므로 피한다 예시 Ex) VAR1, COUNT, $name, _main, open_file …

디렉티브(directive) 어셈블러가 인식하여 동작하는 소스코드에 포함된 명령(command) 명령어(instruction)는 실행시간에 실행되는 반면 디렉티브는 그렇지 않음 디렉티브는 변수, 매크로, 프로시저를 정의할 수 있음 메모리 세그먼트에 이름을 부여 대소문자 구별하지 않음 ex) .data = .DATA = .Data

디렉티브(directive) 세그먼트 정의 어셈블러 디렉티브의 가장 중요한 기능은 프로그램 섹션,즉 세그먼트(segment)를 정의하는 것 .DATA : 변수를 포함하는 프로그램 영역을 표시 .CODE : 명령어를 포함하는 영역을 표시 .STACK : 스택 크기 결정, 실행 스택이 가진 프로그램 영역 표시

명령어 프로그램이 어셈블되었을 때에 실행가능하게 되는 문장 어셈블러에 의해서 기계어 바이트들로 변환 됨. 실행시간에 CPU에 의해서 적재되어 실행 명령어의 기본 요소 레이블 명령어 니모닉 피연산자 주석 표현 형식 [레이블:] 니모닉 피연산자 [;comment]

레이블(label) 레이블은 명령어 또는 데이터의 위치를 표시하는 식별자이다. 명령어 바로 앞에 있는 레이블은 그 명령어의 주소를 의미한다. 마찬가지로 변수 바로 앞에 있는 레이블은 변수의 주소를 의미한다 데이터 레이블 변수의 위치에 대한 식별자 데이터 레이블은 콜론으로 끝날 수 없음 Ex) count DWORD 100 arrary DWORD 1024, 2048 DWORD 4096, 8192

레이블(label) 코드 레이블 target: mov ax,bx … … jmp target 프로그램의 코드 영역에 있는 레이블 같은 프로시저 내에서 유일해야 함 분기나 루프 명령어의 목적지로 사용 됨 예시 target: mov ax,bx … … jmp target

명령어 니모닉(mnemonic) 명령어를 식별하기 위한 짧은 단어 옵션 사용설명 MOV 한 값을 다른 곳으로 이동함 (MOVE) ADD 두 값을 더함 (ADDITION) SUB 한 값에서 다른 값을 뺌 (SUBSTRACT) MUL 두 값을 곱함 (MULTIPLY) DIV 한 값을 다른 값으로 나눔 (DIVISION) CALL 프로시저를 호출함

피연산자(operand) 명령어는 0~3개의 피연산자를 가질 수 있음 레지스터, 메모리, 상수 등을 피연산자로 가짐 메모리는 변수 이름 또는 변수의 주소를 포함하는 한 개 이상의 레지스터로 지정 된다 피연산자 예시 98 : 상수 2+6 : 상수 수식 eax : 레지스터 count : 메모리

피연산자(operand) 명령어에 따라 갖는 피연산자수가 다름 일반적으로 명령어는 레지스터 내용을 수정 함 STC : 0개 INC eax : 1개 MOV count, ebx : 2개 일반적으로 명령어는 레지스터 내용을 수정 함 두 개의 피연산자를 갖는 명령어의 경우 두 번째 피연산자를 첫 번째 피연산자에 반영 ex) MOV count, ebx - ebx에 있는 값을 count로 복사

주석(comment) 프로그램을 설명하는 역할 작성자, 작성일, 소스에 대한 설명 등의 기록에 쓰임 주석의 표현 한줄 주석 : 세미콜론(;)으로 시작하며 같은줄의 ; 뒤 내용은 무시 블록 주석 : comment 디렉티브와 사용자 정의 기호로 시작되며 같은 사용자 정의기호가 나타날 때 까지 모든 내용 무시 사용 예 COMMENT !  This line is a comment.  This line is also a commnet  ! ! 대신 다른 문자 올 수 있음(사용자 정의)

어셈블리?어셈블러? 어셈블리 = 언어 / 어셈블러 = compiler 어셈블러에는 다양한 종류가 존재 각각 문법이 다름 MASM(Microsoft Macro Assembler), NASM(Netwide Assembler), FASM(Flat Assembler), GAS(GNU Assembler), YASM 각각 문법이 다름 Assembler마다 지원하는 platform 이 다르고(인텔의 IA-32 Assembly,IA-64 Assembly 등등) syntax형태에도 차이(Intel 방식과 At&T) 가 있기 때문 수업에는 IA-32 기반 MASM (Microsoft Macro Assembler) 을 사용

MASM(Microsoft Macro Assembler) 가장 많이 쓰는 어셈블러 중 하나 64비트까지 지원 Syntax 는 Intel 방식을 따름 Visual Studio 2005 이하 버전에는 무료로 다운 후 설치 Visual Studio 2008 이후 버전에는 MASM v9.0 기본포함

MASM 설치하기 VS2005 이하 버전이라면 홈페이지에서 별도 다운로드 VS2008 이상 버전이라면 설치확인 http://www.masm32.com / http://www.movsd.com VS2008 이상 버전이라면 설치확인 C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\ml.exe VS2008 버전에 MASM 이 있지만 .inc 와 .lib 파일은 포함되어 있지 않는다. (추후 설치) 첨부된 파일을 설치 (Irvine.zip)

Include파일과 lib파일 경로 지정 포함된 [Irvine.zip]파일 압출 풀기 압축 푼 폴더 복사 Ex) C:\Irvine 아래 파일들이 보이면 성공

프로젝트 생성 VS 2008 실행 [파일][새로 만들기] [프로젝트] ※주의 : 이후 모든 설정 및 실험은 Visual Studio 2008을 기준

프로젝트 생성

소스파일 생성 [소스파일]마우스우클릭 [추가]->[새항목]

소스파일 생성 이름에 확장자(.asm)을 꼭 붙일 것 Ex) 파일명.asm

빌드 규칙 지정하기 [프로젝트] [사용자 지정 빌드 규칙] ※ 어느 방법으로 하든 상관없음

빌드 규칙 지정하기 [Microsoft Macro Assembler]체크  [확인]

Project Properties Settings [프로젝트][속성][구성속성][링커][일반][추가 라이브러리 디렉터리]경로 입력

Project Properties Settings [프로젝트][속성][구성속성][링커][입력][추가종속성]

Project Properties Settings [프로젝트][속성][구성속성][링커][디버깅][디버그 정보 생성] 예(/DEBUG) 선택

Project Properties Settings [프로젝트][속성][구성속성][링커][시스템][하위 시스템] 콘솔 선택

Project Properties Settings [프로젝트][속성][구성속성][Microsoft Macro Assembler][general]

Project Properties Settings [프로젝트][속성][구성속성][Microsoft Macro Assembler][Listing File]

실습 코드

실행 화면

과제 앞으로 실습과제를 수행할 컴퓨터에 MASM을 사용하기 위한 설정을 하고 그 화면을 캡쳐해서 이메일로 제출

과제 메일 및 파일 제목 예시 report 형식(문제정의 등) 갖출 필요 없음 제출 [어셈] 금12_201212345_홍길동_과제02 [어셈] 금34_201212345_홍길동_과제02 report 형식(문제정의 등) 갖출 필요 없음 단, 표지는 있어야 함 제출 10 / 4 실습 수업시간 전까지 하루 delay 할 때마다 -1 일주일 지나면 0점