whois
· 스택(Stack) "LIFO(Last In First Out) 구조를 가지는 자료구조이다." 스택 관련 알아야 할 지식1. 함수 호출 시 파라미터가 들어가는 방향2. 리턴 주소3. 지역 변수 사용 함수 안에서 스택을 사용할 때 다음과 같은 코드가 엔트리 포인트에 생성된다.push ebpmov ebp, espsub esp, 50h ① ebp 레지스터를 스택에 넣는다.② 현재 esp 값을 ebp에 넣는다.③ esp에서 50h만큼 빼서 공간을 확보한다. [그림 1] 함수 프롤로그 좀 더 구체적인 동작 과정을 설명하기 위해 그림 1을 그려봤다. 첫 번째 push ebp를 하게 된 후에 그림은 노란색으로 표시 된 것과 같다. EBP는 Base Pointer를 가리키며, ESP는 현재 스택의 최상단 EBP 위쪽..
· PUSH, POP"스택에 값을 넣는 것을 PUSH, 스택에 있는 값을 가져오는 것이 POP이다."PUSHAD, POPAD는 모든 레지스터를 PUSH하고 POP하라는 명령어이다.오퍼랜드는 1개만 있으면 된다. · MOV"값을 이동시키는 역할을 하며, 리눅스에서 cp 명령어와 같다고 볼 수 있다." · LEA"MOV와 혼동할 수 있는 명령어로, MOV는 값을 가져오지만 LEA는 주소를 가져온다." ex) 레지스터와 메모리에 다음과 같은 값이 들어 있다고 가정한다.esi : 0x401000*esi : 12345678 lea eax, dword ptr ds:[esi]: esi가 번지수가 0x401000이니 eax에 0x401000이 들어간다. mov eax, dword ptr ps:[esi]: 0x40100..
레지스터란 "CPU가 사용하는 변수"이다. · EAX "가장 많이 쓰는 변수로써, 산술 계산을 할 때 사용하고 리턴값을 전달한다." [그림 1] EAX 레지스터 내부 16비트 시절에는 EAX가 아닌 AX 레지스터를 사용하였지만, 32비트로 넘어오면서 Extended 즉, 확장된 EAX 레지스터를 사용한다.EAX 레지스터의 내부 구조는 그림 1과 같다. AX는 AH와 AL을 가진다.구체적으로, 높은 주소인 AH와 낮은 주소인 AL 8비트씩 모여 16비트인 AX가 된다. [그림 2] 레지스터 개념 테스트 코드 그림 2와 같이 테스트 코드를 만들어 레지스터 개념을 잡아볼까 한다.① 0x12345678이라는 16진수 값을 eax에 넣는다.② 0x12340000이라는 16진수 값을 edx에 넣는다.③ ax 값(0..