프로그램의 구조.
: 3개의 Section
section.data
--> static / local 선언 및 초기화 변수가 정의되는 곳. 상수, 파일 명, 버퍼 사이즈를 선언
section .txt
--> 실제 실행할 코드를 작성하는 곳
section .bbs
--> 초기화가 안된 추가적인 변수가 구성되는 곳
레지스터
범용 레지스터 (4가지)
RAX : A : Accumulator : 계산기
더하기 / 빼기 등 산술/논리 연산을 수행하며 함수의 return값이 저장된다.
결과값 --> 주소
RBX : B : Base : 메모리 주소를 저장하기 위한 용도로 사용된다. --> 변수
간접 번지 지정 : 참조 데이터 타입 ---> Value, 변수를 저장한다.
RCX : C : Count : 반복문에서 카운터로 사용되는 레지스터
for문의 i와 같은 역할을 수행한다.
다만 RCX는 미리 반복값을 정해두고 명령어를 수행할 때마다 값이 줄어든다.
syscall을 호출했던 사용자 프로그램의 return주소를 갖는다.
RDX : D : Data : 다른 레지스토를 서포트하는 여분의 레지스터
큰 수의 곱셈이나 나눈셈 연산에서 RAX와 함께 사용된다.
RAX를 보조하는 역할 수행
예) 나누기를 진행할 경우 몫은 RAX에 나머지는 RDX에 저장된다.
인덱스 레지스터(2가지)
RSI (Source Index) : 데이터를 복사할 때 src데이터, 즉 복사할 데이터의 주소
RDI (Destination Index) : 데이터를 복사할 때 dest데이터, 즉 복사된 데이터의 주소
포인터 레지스터(3가지)
RSP (Stack Pointer) : 스택프레임에서 스택의 끝 지점 주소(현재 스택주소)가 저장된다.
디버거 명령어 : x/1000a $rsp
push, pop 명령을 통해 RSP값이 위아래로 8바이트씩 이동하면서
스택프레임의 크기를 변경한다.
RBP (Base Pointer) : 함수가 호출되면 스택프레임이 형성되는데 이 스택프레임의 시작
지점 주소(RET --> 복귀주소)
RIP (Instruction Pointer)
: (RSP비슷) : 다음에 실행할 명령어의 주소를 가지고 있는 레지스터
현재 실행하고 있는 명령어가 종료되면 이 레지스터에 있는 명령어를 실행하게 된다.
[RSP - 8]
플래그 레지스터
RFLAGS register : 시스템 제어 용도 혹은 어셈블리에서는 비교/조건문 처리 용도로 사용되는 상태 레지스터이다. 연산 결과에 따라 64비트 레지스터의 각 비트에 0(clear, reset) 혹은 1(set)로 표시해 처리 결과를 저장한다.
CF (Carry Flag) : 부호 없는 수 끼리 연산 결과가 자리올림/자리내림이 발생할 때 1, unsigned int 값을 벗어날 때 1
OF (Overflow Flag) : 부호 있는 수 끼리연산 결과가 용량을 초과하였을 경우 1
SF (Sign Flag) : 연산 결과 최상위 비트가 1인 경우 1
ZF (Zero Flag) : 연산 결과가 0이면 1
AF (Auximiliary-carry Flag) : 16비트 연산시 자리올림/자리내림이 발생할 때 1
PF (Parity Flag) : 연산 결과가 짝수면 1, 홀수면 0
DF( Direction Flag)
IF (Interrupt Fla )
TF (Trap Flag)
'모의해킹 및 보안' 카테고리의 다른 글
ELK, ELK 설치 (0) | 2024.12.11 |
---|---|
코드 분석(디버깅) (0) | 2024.11.26 |
CMD를 통한 Postexploit (0) | 2024.11.26 |
Window Defender 해제(CMD) (0) | 2024.11.26 |
MSF_venom (0) | 2024.11.25 |