목록교육/KisaGym (6)
김승현
24강 [이론] 컴파일된 코드의 패턴 식별 - 순환문 패턴 식별 (For, While) 컴파일된 순환문은 일반적으로 세 개의 영역으로 나눌 수 있음순환문 탈출조건 점검 영역순환코드 바디 영역조건 값 변화 영역예제 코드 - whileint a = result = 0;while(a예제코드 - forint a = result = 0;for(; a gcc의 경우 어셈블리어로 했을 때 for문과 while문의 차이가 나타나지 않음visual studio의 경우 while일 때 조건 값 변화가 젤 아래에 있지만 for일 때는 조건값이 젤 위로 올라옴visual studio 컴파일의 경우 gcc의 형태와 비슷한 형태로 컴파일 됨 이런 코드들을 Ghidra같은 디컴파일러 같은 도구를 쓰면 for.c while.c를 ..
21강 [이론] 함수 호출규약 - 개념과 함수 호출규약의 종류 함수 호출 규약이란?함수를 호출하는 caller와 호출당하는 callee간의 규칙파라미터 전달 방법파라미터 전달 순서파라미터 전달에 사용된 스택 영역의 해제 주체x86 함수 호출 규약의 종류ABI란? Application Binary Interface의 약자로 바이너리 기반 프로그램 모듈에서 스택 구성 방식임.메모리 액세스 방식 등을 정의한 일종의 규칙으로 프로세서가 직접 액세스 할 수 있는 기본 데이터 유형의 크기, 레이아웃 및 정렬 등을 정의한 것 함수 호출규약이란 caller와 callee간 혼선이 발생하는 상황을 예방하기 위한 규칙으로도 요약 가능함혼선의 예시 매개변수 전달방법caller는 파라미터를 스택을 통해 전달했는데, calle..
16강 [이론] 가상주소공간의 스택 메모리 - 스택 메모리 개요 IA32 메모리의 프로세스가 사용하는 가상주소공간에서 대표적으로 많이 사용되는 버퍼 메모리로,힙과 스택이 있음스택은 호출되는 함수들의 운용을 위해 존재함 스택스택은 탑 포인터가 마지막으로 저장된 데이터를 가리키며, 낮은 주소 방향으로 자라는 "Full Descending Stack" 방식또한 POP될 땐 후입선출(LIFO) 방식이다. 스택은 Top Pointer( ESP의 역할 )가 마지막으로 들어온 값을 가리키느냐 들어올 다음 영역을 가리키느냐에 따라 Full Stack, Empty Stack으로 나눌 수 있음 또 0에서 100번지 방향으로 가느냐 혹은 100에서 0번지로 가느냐에 따라 Ascending Stack 혹은 Descending..
13강 [이론] CPU의 레지스터와 주요 명령어 - IA32 주요 레지스터 세트 레지스터란?프로세서 레지스터 (혹은 레지스터)는 CPU 내에 존재하는 작은 크기의 저장 공간이다.CPU 내부에 있기에 HDD나 SSD보다 빠른 접근 가능. 레지스터는 목적에 따라 여러 개의 세트 그룹으로 나뉨 범용 레지스터산술/논리 연산에 사용되는 피연산자 정보, 주소, 계산을 위한 피연산자 정보, 메모리 포인터 정보 등을 담고 있음EAX, EBX, ECX, EDX, ESI......앞에 있는 E는 Extended임. 32비트가 되면서 변경된 이름EAX : Accumulator Register라고 부름 - 어떤 함수의 호출 결과나 연산의 결과를 저장함산술/논리 연산 수행 결과값 저장윈도우 함수 호출 결과값 저장ECX : C..
4강 [이론] PE 파일의 개괄적 구조와 실행전후 변화PE(PE-COFF) 파일이란? 윈도우 운영체제에서 사용하는 실행파일의 포멧ex) EXE/DLL/SYS 등일부 영역을 제외하곤 실행 전후로 모습이 거의 유사함 PE파일Header와 여러 개의 Section으로 이루어져 있음. header에서 집중해서 봐야 할 부분ImageBase해당 PE파일이 메모리에서 매핑되는 시작 주소AddressOfEntryPoiontPE파일이 매핑된 후 가장 먼저 실행될 코드의 위치---- 보통 Header를 읽으면 위의 정보와 section 개수와 위치값, 이름, protection을 얻을 수 있음(section table)---- 보통의 r 권한만 있음 필수적인 Section.text Section보통 컴파일된 기계어 ..
1강 [이론] 윈도우 실행파일의 생성 및 실행과정포노이만 구조에 의해 실행파일의 실행 과정은스토리지 저장 - 메모리에 로드 - CPU에 의해 실행스토리에선 실행파일의 형태가 아닌 a.c와 같은 코드의 형태 c언어 코드는 사람을 위한 문법으로 작성된 것 -> 고급언어 (java, c, c++)위의 c언어와 같은 고급언어를 cpu가 이해할 수 있는 머신언어로 컴파일하는 과정이 필요함 컴파일이란? 기계가 이해할 수 있게 번역하는 과정이라 볼 수 있음 컴파일 과정 중 문법체크는 필수 기계어로 번역된 게 컴파일 후 나온 아웃풋인데 이걸 .obj인 오브젝트 파일이 나옴java에선 a.java가 a.class파일이 되는 것과 동일함아래는 예시더보기exam.c -> exam.obj exam.java -> exam.c..