전체 글 (15) 썸네일형 리스트형 리버싱 핵심원리 10장 10장 함수 호출 규약 함수 호출 규약은 함수를 호출할 때 매개변수를 어떤 식으로 전달하는가에 대한 일종의 약속. 함수 호출 전에 매개변수를 스택을 통해 전달하게 된다. 스택은 프로세스에서 정의된 메모리 공간이며 주소가 줄어드는 방향으로 자람. 또한 PE헤더에 그 크기가 명시되어 있음. 즉 프로세스가 실행될 때 스택 메모리의 크기가 결정됨.(malloc/new와 같은 동적 메모리 할당과는 다름) *함수가 실행 완료 되었을 때 스택에 들어있던 매개변수들은 그대로 놔둔다. 이유는 스택에 저장된 값은 임시로 사용하는 값이기 때문에 더 이상 사용하지 않더라도 값을 지우거나 하면 불필요한 cpu자원을 소모하기 때문. 어차피 다음번에 스택에 다른 값을 입력할 때 저절로 덮어쓰는데다가 스택 메모리는 이미 고정되어 있.. 리버싱 핵심원리 8장 8장 abex'crackme #2 Visual Basic으로 제작된 abex'crackme를 크랙해보자. VB파일은 MSVBVM60.dll이라는 VB전용 엔진을 사용함.(The Thunder Runtime Engine이라고 불리기도 함) VB엔진의 사용 예시로는 메세지 박스를 출력하고 싶을 때 VB소스코드에서 MsgBox()함수를 사용하는데 VB컴파일러는 실제로 MSVBVM60.dll!rtcMsgBox() 함수가 호출되도록 만들고, 이 함수 내부에서 Win32 API인 MessageBoxW()함수를 호출해주는 방식으로 동작함. 리버싱 핵심원리 7장 7장 스택 프레임(Stack Frame) 스택 프레임이란 ESP(스택 포인터)가 아닌 EBP(베이스 포인터)레지스터를 사용하여 스택 내의 로컬 변수, 파라미터(매개변수), 복귀 주소에 접근하는 기법을 말함. ESP 레지스터의 값은 프로그램 안에서 수시로 변경되기 때문에 스택에 저장된 변수, 매개변수에 접근하고자 할 때 ESP값을 기준으로 하면 프로그램을 만들기 힘들고, cpu가 정확한 위치를 참고할 때 어려움이 있다. 따라서 어떤 기준 시점(함수의 시작)의 ESP값을 EBP에 저장하고 이를 함수 내에서 유지해주면 ESP값이 변경되어도 EBP를 기준으로 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근할 수 있다. 이것이 바로 EBP 레지스터의 역할. 함수가 시작(call)할 때 ESP는 함수의 실.. 이전 1 2 3 4 5 다음