어셈블리어
기계어 와 1대1로 대응하는 언어 시스템 이해에 필요함
레지스터
범용 레지스터, 상태 레지스터, 플래그 레지스(cpu 내의 저장공간)
레지스터 구조
1.데이터 레지스터:EAX, EBX, ECX, EDX
EAX: Extended Accumulator Register
곱셉이나 나눗셈 연산에 사용, 함수의 결과값 저장
EBX: Extended Base Register
베이스 레지스터라 불리며 메모리 주소를 저장하기위한 용도로 사용된다
ECX: Extended Counter Register
계수기 레지스터라 불리며 반복명령어(for문이나 while문) 사용시 반복카운터로 사용되는 레지스터
EDX: Extended Data Register
데이터 레지스터라 불리며 곱셈,나눗셈에서 EAX와 함께 쓰이며 입,출력 포인터 값을 저장할 때 사용
2.포인터 레지스터:ESP, EBP
ESP: Extended Base Pointer
스택 포인터의 최종 주소
EBP: Extended Stack Pointer
대신해 함수 지역변수 가리키는 용도
3.인덱스 레지스터:ESI ,EDI
ESI: 다량의 메모리 와 비교시 그 소스의 주소를 저장한다
EDI: 다량의 메모리를 옮기거나 목적지의 주소 저장
4.세그먼트 레지스터:CS, DS,SS,ES(부분)
CS: 프로그래머의 코드 시작주소를 가지고 있다
DS: 데이터의 시작 주소를 가지고 있다
SS: 스택의 시작주소 가지고있다
ES:두곳이상의 데이터 DS와 함께 쓰임
5.상태 레지스터:EIP(IP),EFLAGS(FLAGS)
EIP:현재 실행되는 프로그램의 주소
EFLAGS: 비타 단위의 플래그 들을 저장하는 레지스터
어셈블리 명령어
작동코드 1 오퍼랜드 2 오퍼랜드;설명(주석)
mov eax, ebx
주소 저장 방식
1. 즉시 저장 방식
mov 0x1, eax 직접 값을 eax에 넣었다
2. 레지스터 저장 방식
mov esp, ebp b = a 처럼 ebp에 esp 값을 할당해 주는 방식
3.직접 주소 지정방식
mov eax, 주소 주소에 eax 값을 할당한다
4. 레지스터 간접 주소 지정 방식
mov (ebx), eax ebx값을 간접적으로 eax에 할당// 잘 모르겠다...
5. 베이스 상대 주소 지정 방식
mov 0x4(ebx), eax ebx주소에 4바이트를 더한 주소 값을 eax 에 할당한다
명령어
MOV - 데이터 이동
PUSH - 오버랜드의 내용을 스택에 쌓는다.
POP - 스택으로부터 값을뽑아낸다.
SUB -레지스터나 메모리의 값을 뺄셈할 때 쓰인다
ADD - 레지스터나 메모리의 값을 덧셈할 때 쓰인다.
LEA - 매개변수나 지역변수의 주소를 얻어오는것
NOP - 아무동작도 하지않음 //0x90
if 명령어 분기
JNE/JNZ (jump on not Equal / not Zero) - 결과가 0이 아니면 분기
JNL/JGE (Junp on not Less / GReater or Equal) - 결과가 크거나 같으면 분기
JNLE/JG (Jump on not Less or Equal / Greater) - 결과가 크면 분기
JNB/JAE (Jump on not Below / Above or Equal) - 결과가 크거나 같으면 분기
JNBE/JA (Jump on not Below or Equal / Above) - 결과가 크면 분기
프로시져 : call, ret
1. call- 다음 주소를 스택에 push 한다 즉 eip를 변경하여 다른 함수를 제어한다는 뜻이다
2. ret (return) call명령 당시 push되었던 주소를 pop하여 eip에 넣는 것이다.
스택 조작 push, pop
1.pop 스택으로부터 값을 뽑아낸다
2. push 오버랜드의 내용을 스택에 쌓는다.
출처 및 참고:http://aistories.tistory.com/12
Hello! Your post has been resteemed and upvoted by @ilovecoding because we love coding! Keep up good work! Consider upvoting this comment to support the @ilovecoding and increase your future rewards! ^_^ Steem On!
Reply !stop to disable the comment. Thanks!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit