HW_chick hacker
어셈블리어 - 이름 출력 본문
어셈블리어란?
기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어이다.
컴퓨터 구조에 따라 사용하는 기계어가 달라지며, 다라서 기계어에 대응되어 만들어지는 어셈블리어도 각각 다르게 된다. 컴퓨터 CPU마다 지원하는 오퍼레이션의 타입과 개수는 재각각이며, 레지스터의 크기와 개수, 저장된 데이터 형의 표현도 각기 다르다.
CPU 레지스터 종류: 범용 레지스터, 상태 레지스터, 플래그 레지스터
- 레지스터: CPU내부의 기억장소로 PC가 정보를 처리하기 위해서는 정보가 특정한 셀에 저장되어야 한다. 레지스터들은 8 또는 16비트 플립-플롭 회로들의 집합이다. 플립-플롭 회로란 두 단계의 전압으로 정보를 저장할 수 있는 장치이다.

< 레지스터의 구조>
1. 데이터 레지스터
- 데이터 레지스터는 각종 데이터 처리를 대상으로 하는 32비트 레지스터 및 16비트 레지스터 일부를 프로그래머가 명령 중에서 자유롭게 지정을 할 수 있는 범용 레지스터이다.
: EAX, EBX, ECX, EDX
2. 포인터 레지스터
: ESP, EBP
3. 인덱스 레지스터
: ESI, EDI
4. 세그먼트 레지스터
: CS, DS, SS, ES



어셈블리어 명령어

- 명령어의 분류
1. 데이터이동: mov, lea
2. 논리, 연산: add, sub, inc, dec
3. 흐름제어: cmp, jmp
4. 프로시져: call. ret
5. 스택조작: push, pop
6. 인터럽트: int
- mov (move data)
SOURCE위치에 들어있는 데이터를 복사하여 DESTINTION 위치에 저장.
원칙: 메모리와 레지스터(모든 연산은 레지스터에 자장된뒤 이루어진다.) 사이의 데이터 이동, 레지스터와 레지스터 사이의 데이터 이동이나 값을 메모리나 레지스터에 대입할 때 사용한다.
- Lea
SOURCE OPERAND에서 지정된 주소를 DESTINTION으로 로드한다.
매개변수나 지역변수의 주소를 얻어오는 것이다. SOURCE OPERAND는 메모리에 위치해야하며, 변경될 주소는 index register나 DESTINATION에 정의된 주소여야 한다.
- call
스택 상에서 CS를 다음에 오는 명령의 오프셋 어드레스를 PUSH하고 target으로 이동한다. 즉, 다른 함수로 제어를 옮긴다는 뜻이다.
- ret (return)
호출된 함수에서 호출한 함수로 복귀, esp에 있는 값을 꺼내서 EIP에 있는 값을 꺼내서(pop) EIP레지스터에 할당한다.
- 인터럽트: int
운영체제에 할당된 인턴트 영역을 systerm call
1) 데이터를 특정 구간에 한 글자씩 저장(emu8086)


- org 100h: 메모리에 상주 할 프로그램의 주소를 알려주며 머신 코드가 100H 부터 위치하는 특정 위치에 배치함.
- mov 특정구간 정해진 곳에 각각 문자열을 순서대로 출력함.
2) 데이터 명령어 사용으로 축소(emu8086)


- main proc를 지정하여 msg db 'hyeon-wuu-kim'의 이름을 출력
3) vm환경에서 칼리리눅스 사용 (hello world 출력)

- nano는 대표적인 에디터로 메모장처럼 작성할수 있음.

- intel 문법으로 작성

1. helloworld 파일을 목적코드로 변환

2. helloworld 파일을 실제로 우리가 사용할수 있는 프로그램으로 만든다


3. 실행 파일 생성

'Activity > Hawkis' 카테고리의 다른 글
| Plz Recovery - CTF문제 (0) | 2023.07.05 |
|---|---|
| babyforms, babysheet - CTF문제 (0) | 2023.07.05 |
| 과유불급 문제 - CTF문제 (0) | 2023.06.07 |
| 웹 개발 및 SQL Injection - SQL Injection (2) (0) | 2023.02.04 |
| 웹 개발 및 SQL Injection - 개발 및 DB연동 (1) (1) | 2023.02.03 |