가상주소공간의 스택메모리 - 호출된 함수의 복귀주소와 분석
·
리버싱
복귀주소 개념을 이해하기 위한 선행 개념스택: LIFO 구조의 자료구조로 함수 호출 시 로컬 변수와 복귀 주소를 저장함스택 프레임: 함수 호출마다 생성되는 메모리 블록, 반환되면 프레임이 제거됨프로그램 카운터: 다음에 실행될 명령어의 주소를 저장하는 레지스터스택 포인터: 스택의 가장 마지막, 위쪽 데이터 위치를 나타내는 포인터프레임 포인터: 스택 프레임의 시작 위치를 가리키는 포인터 호출하는 호출자 Caller 함수는 호출대상 Callee 함수를 호출할 때 되돌아올 주소값을 스택에 백업함1. 복귀주소 Return Address란?함수가 끝난 후 다시 돌아갈 주소를 복귀주소라고 한다. 함수명() 명령이 호출되고 실행될 때 복귀주소가 스택에 저장되고 함수 실행이 끝나면 원래 프로그램으로 돌아가야 함. 인텔 ..
가상주소공간 VAS의 스택 메모리 IA32 스택 프레임
·
리버싱
스택프레임 : 함수가 사용하는 스택의 영역으로 호출된 함수의 지역변수, 매개변수, 반환 주소 등이 있다함수 호출마다 새로운 스택 프레임 생성과 제거의 과정이 이루어짐  - EBP: 함수의 스택 프레임 시작주소 /Base Pointer → 고정 - ESP: 함수의 스택 프레임 끝 주소 /Stack Pointer → 변함  main 함수가 실행되면 main 함수의 스택 프레임, 다음에 A()가 실행되면 A함수의 스택 프레임이 생성되는 구조, 함수 실행 끝나면 프레임도 무효화됨(삭제는 X) 프로세스 흐름이 main에서 A함수로 넘어가면 EBP 프로세스 역시 A 함수의 시작 부분으로 이동  스택 프레임 생성과 종료  함수가 실행된 직후 함수에 의해 스택 프레임이 생성됨 함수 시작 직후 스택 프레임을 시작하는 코..
리버싱 :: 가상주소공간 VAS 스택메모리
·
리버싱
스택메모리스택에는 함수에게 전달된 파라미터, 지역변수, 반환주소 등이 보관됨 탑포인터가 마지막으로 저장된 데이터를 가리키고, 낮은 방향으로 자라는 full descendung stack 방식 PUSH→ 탑포인터가 올라가고 POP→ 탑포인터 내려감 2개의 오퍼레이션 PUSH, POP 한 개의 탑포인터 ESP로 운용됨 Call Stack현재 실행 중인 서브루틴에 관한 정보를 저장하는 스택 자료구조스택 자료구조와 다르게 중간에 있는 데이터 바로 사용가능 full descending 방식 Full Stack vs Empty Stack push 명령어를 통해 마지막에 들어온 데이터가 TOP 포인터면 Full stack그다음 위치를 가리키면 Empty stack Ascending/Descending Stack 메모..
IA32 어셈블리 주요 명령어 이론과 실습
·
리버싱
명령어  MOV 두 연산자의 크기가 동일해야 한다 Operand 대상은 메모리 공간, 데이터, 레지스터 가능source 피연산자 값을 destination 피연산자로 복사mov DWORD [0x00000100], 0Ah: A=10 이라는 값을 []안에 있는 메모리 주소로 복사한다 mov eax, DWORD [0x00000100]: `[0x00000100]` 안에 있는 값을 eax로 복사한다 [대괄호]가 나오면 주소값으로 생각하기LEASource 피연산자 참조 메모리 주소를 Destination 피연산자 저장 ⇒ 주소 값을 저장 lea eax, [edx+4]  edx = 8: edx+8 =12가 eax에 저장된다 ADDSource 피연산자를 동일한 크기의 Destination 피연산자에 더함 Source ..
CPU 레지스터와 주요 명령어 - IA32 주요 레지스터
·
리버싱
레지스터: cpu내에 존재하는 작은 크기의 다목적 저장공간, 물리적으로 가깝기 때문에 CPU가 직접 접근할 수 있고 속도가 빠름. 산술, 논리, 반복, 스택메모리 등 정보 프로그램 실행에 필요한 정보(메모리 주소, 데이터 등)이 있음 반면 메모리(RAM ..)는 더 많은 데이터를 저장할 수 있음 ALU가 계산기라면 레지스터는 메모장, 연습 범용 레지스터(General purpose register)산술/논리 연산에 사용되는 피연산자 정보, 주소 계산을 위한 피연산자 정보, 메모리 포인터 정보를 담고있는 레지스터비트에 따라서 레지스터 명칭도 조금씩 달라진다 32 bits : EAX EBX ECX EDX 16 bits : AX BX CX DX  8 bits : AH AL BH BL CH CL DH DL EA..
PE 파일의 자료구조 임포트 테이블 분석 실습
·
리버싱
introEXE파일은 혼자 일할 수 X → DLL에 정의된 API을 호출해야 함→ PE-COFF 파일에는 참조해야 하는 DLL, API 관련 정보들을 구조화하는데 이를 임포트 테이블이라고 함임포트테이블에 바인딩 때문에 저장매체에서와 메모리에서 실행될 때 내용이 약간 달라진다 CFF Explorer를 사용해서 임포트 테이블의 위치를 살펴보자CFF ExplorerOptional Header 안에 위치한 데이터 디렉토리에 export/import/TLS 에 관한 정보가 있고 해당 정보들이 존재하는 포인터와 사이즈 정보가 있다 Nt Header\Optional Header\Data Directories에 들어가니 export\import 디렉토리 정보가 뜬다00007000은 절대주소가 아닌 오프셋이므로 파일의 ..