본문 바로가기

리버싱/개념

(6)
스택프레임 스택 프레임(stack frame) 메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다. 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다. 함수가 호출되면 스택에는 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소값, 함수에서 선언된 지역 변수 등이 저장된다. 이렇게 스택 영역에 차례대로 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 한다. 이러한 스택 프레임 덕분에 함수의 호출이 모두 끝난 뒤에, 해당 함수가 호출되기 이전 상태로 되돌아갈 수 있다.
리버싱에 필요한 것은? (레지스터, 어셈블리어) 리버싱에 필수적인 것으로 레지스터와 어셈블리어가 있습니다. 소스코드를 어셈블리 코드로 만드는 것을 컴파일, 어셈블리 코드를 기계어로 만드는 것을 어셈블이라 하고 반대로 기계어를 어셈블리 코드로 만드는 것을 디스어셈블, 어셈블리 코드를 소스코드로 만드는 것을 디컴파일이라고 합니다. 어셈블리어는 컴파일한 아키텍쳐어 따라서 Intel, Mips, Arm으로 나뉘고, 컴파일한 운영체제의 크기에 따라서 16, 32, 64비트로 나뉩니다. 이때 32비트는 x86, 64비트는 x64라고 표현합니다. 어셈블리는 레지스터를 이용해서 계산을 할 때 수식의 역할을 한다고 생각하면 편합니다. opcode는 명령어, operand는 인자값입니다. 이 어셈블리의 레지스터는 CPU의 변수입니다. 레지스터및 어셈블리의 정리는 이 링..
리버싱에 필요한 것은? (linux) 보호되어 있는 글입니다.
리버싱이란? 보호되어 있는 글입니다.
PE 헤더 보호되어 있는 글입니다.
어셈블리 명령어&레지스터 종류 한눈에 보기 어셈블리 명령어 RAX와 EAX에서 R과 E의 차이 E는 32비트R은 64비트 프로그램 PUSH,POP - 스택에 값을 넣는 것을 PUSH, 스택에 있는 값을 가져오는 것이 POP이다. MOV - MOV는 값을 대입한다. LEA - LEA는 주소를 대입한다는 뜻이다. ADD, SUB - ADD a,b 는 a에 b만큼 값을 더하는 명령어이다. - SUB a,b는 a에서 b만큼 값을 빼는 명령어이다. INC,DEC - INC는 c언어의 i++; - DEC은 i--; 라고 생각하면 된다. AND, OR, XOR - 명령어 a,b 에서 and,or,xor연산을 한다. - XOR은 같은 값으로 XOR을 하면 0이 되기 떄문에 XOR로 같은 오퍼랜드를 전달했을떄, 이것은 변수를 0으로 초기화 하는 효과를 줄 수 있..