본문 바로가기
Reverse engineering/리버싱 분석 강의 정리

리버싱#1 x86 어셈블리 소개

by grey-hat hacker 2021. 2. 25.
728x90

x86 아키텍처

• 데이터 타입: 어셈블리 기본

주소 표기법: 리틀 엔디안 / a b c d -> d c b a 

• 레지스터: 8개의 범용 레지스터, EIP, EFLAGS

• 호출 규약: cdecl, stdcall, fastcall

• 명령어 세트: 가변 길이 명령어 형식을 사용 

• 피연산자: 레지스터, 메모리 주소, 주소값, 숫자

• 기본 문법: AT&T(원투) 또는 Intel (투원) / 리눅스 AT&T 사용 윈도우 Intel 방식

 ex> AT&T = add a,b > b=a+b  // Intel 방식 = add a,b > a=a+b

 

 

레지스터

• 8개의 범용 레지스터 + EIP(32비트)

• EFLAGS 레지스터(32비트)

• 세그먼트 레지스터(16비트)

 

• EAX - 산술 연산에 사용, 함수 리턴값 저장

• EBX - 베이스, 특정 메모리를 가리키는 포인터

• ECX - 카운터 코드에 사용

• EDX - 데이터 레지스터 (곱셈, 나눗셈 )

 

 

• ESI - 문자열 연산의 출발지 포인터 

• EDI - 문자열 연산의 목적지 포인터

 

 

• ESP - 스택 포인터

• EBP - 스택 프레임 베이스 포인터. 스택의 기준 주소를 저장

• EIP - 다음 실행할 명령어를 가리키는 포인터

 

EFLAGS 레지스터

• 상태 플래그

• 방향 플래그

• 시스템 & IOPL 플래그

 

• CF - Carry

• PF - Parity

• AF - Adjust

• ZF - Zero

• SF - Sign

• OF - Overflow

 

명령어 세트

명령어 유형 의 미 대표 명령어 세트
데이터 이동 src에서 dst로 이동 mov, lea, les, push, pop, pushad, popad
산술 정수의 산술 연산 add, adc, sub, sbb, mul, imul, div, idev, cmp, inc, dec
부동 소수점 부동 소수점 산술 연산 fadd, fsub, fmul, div, cmp
논리 비트 논리 연산 and, or, xor, not, shl/sal, shr, sar, ror, rol
제어 이동 제어 흐름의 이동 jmp, jcc, call, ret, int, into
문자열 문자열의 비교, 이동 movs, stos, sca, outs, rep, repz, repnz, repne
I/O 입력과 출력 in, out
변환 데이터 타입 변환 movzx, movsx, cbw, cdq, bswap
기타 플래그 조작, 특권 모드 처리 clc, stc, cmc, std, cl, sti

• 어셈블러: 어셈블리 언어 compiler(assemble)

 

• 대표적인 어셈블러 • GAS(GNU 어셈블러) - AT&T 방식으로 무료이며 크로스 플랫폼을 지원. GNU Project에서 제작

• MASM(Microsoft Macro Assembler) - Intel 방식으로 비주얼 스튜디오 2008부터 기본 탑재. 매크로 지원. 크로스 플랫폼 미지원

• NASM(Netwide Assembler) - 80x86 플랫폼 용으로 크로스 플랫폼을 지원. MASM과 유사한 점 많음(Intel 방식)

 

 

 

 

728x90
반응형

댓글