2017. 10. 16. 21:41ㆍSystemHacking/Assembly
NASM 이라는 어셈블러를 사용하도록 하겠습니다
NASM 에서는 한 개의 문자나 문자열 모두 ' ' 로 표현합니다
또한 문자와 문자를 , 를 사용해서 연결합니다
1> 'abcd' = 'ab' , 'cd'
2> 'Hello, World!!!' , 10 , 00
10과 00 은 무엇일까?
아스키 코드 10 => New Line ( Enter )
아스키 코드 00 => NULL ( 문자열의 끝을 알림 )
* 어셈블러 기본 데이터의 단위
단위 크기 C NASM(문자로표현)
byte 1 char b
word 2 short w
double word 4 int,long, float(32bit기준) d
pointer(32bit기준)
quad word 8 long long, double q
ten byte 10
* 어셈블러는 이전 게시글에서 확인했던 섹션마다 데이터 표현 방법이 다릅니다
섹션별로 데이터 표현 방법에 대해 알아보도록 하겠습니다
( data section : 초기값을 가지는 변수를 저장하는 섹션 )
[레이블]: <white space> [크기] <white space> [문자열or숫자의 초기값]
msg: db 'Hello, World!!!',10,00
-> 레이블은 변수 이름이 아니다 !!
-> 변수의 개념과는 다르다. 주소의 또 다른 표현으로 볼 수 있다
=> data 섹션의 msg레이블(=주소)에 문자열을 위치시킨다!!!
section .data ; initialized data section data섹션영역임을 선언
msg1: db '%s %s', 10, 00 ; char msg1[]="%s %s\n"; buffer: dd 1,2,3,4,5; ; int buffer[] = {1,2,3,4,5};
|
[2] bss section 에서 데이터를 표현하는 방법
section .bss a: resd 1 ; int a str: resb 1024 ; char str[1024]
|
[3] text section 에서 데이터를 표현하는 방법
text section 에서는 레지스터와 메모리 라는 개념을 사용하게 된다
해당 개념에 대해서만 알고 다음 글에서 설명하도록 하겠습니다
[ 레지스터 종류 ]
CPU가 사용하는 데이터저장소
1.메모리
2.레지스터
CPU가 사용하는 고속의 기억 소자
특별한 용도를 위해서 사용하는 저장공간
CPU당 1개의 레지스터만을 제공한다
레지스터를 새로 생성,수정,삭제 등을 할 수 없다
1-1> General-Purpose Registers ( 범용 레지스터 )
- EAX (Extented Acummulator) : Accumulator for operands and results data , 주로 산술연산시 사용
EAX(32bit) - AX(16bit) - AH,AL(각각 8bit)
- EBX (Base) : Pointer to data in the DS segment , EAX보조 역할
EBX - BX -BH,BL
- EDX (Data) : I/O pointer , EAX 보조 역할
- ECX (Counter) : Counter for string and loop operations , 명령어 반복 처리시 반복횟수저장
1-2> 포인터 레지스터 ( 특정 주소를 가리킨다 )
- ESI ( Extented Source Index ) : 문자열 복사시 주로사용 ( ECX와 함께 )
- EDI ( Destination Index ) : 문자열 복사시 주로사용 ( ECX와 함께 )
- EBP ( Base Pointer ) : Stack 섹션에서 주로 사용
- ESP ( Stack Pointer ) : Stack 섹션에서 주로 사용
- EIP ( Instruction Pointer ) : 다음 실행할 명령어의 주소가 들어간다
1-3> 상태 레지스터
EFLAGS : 상태정보를 나타낸다 32비트로 구성
SF 부호가 발생한 경우
ZF 연산결과가 0
CF 올림수
1-4> 세그먼트 레지스터 : 물리메모리 가상메모리 매핑시 사용
'SystemHacking > Assembly' 카테고리의 다른 글
[6] 어셈블리 비트연산 ( shift, and, or, not ) (0) | 2017.10.20 |
---|---|
[5] 어셈블리 계산기 , scanf , printf (0) | 2017.10.19 |
[4] 어셈블리 명령어 add,sub,mul,div (0) | 2017.10.18 |
[3] 어셈블리 text section / mov / lea (0) | 2017.10.17 |
[1] 어셈블리 배경지식 / xxd, objdump 명령어 사용법 (0) | 2017.10.15 |