본문 바로가기

전체 글

(171)
1098 : [기초-종합+배열] 설탕과자 뽑기 문제 설명 아버지와 함께 유원지에 놀러간 경곽이는 설탕과자(설탕을 녹여 물고기 등의 모양을 만든 것) 뽑기를 보게 되었다.길이가 다른 몇 개의 막대를 바둑판과 같은 격자 판에 놓는데,격자 판에 적혀있는 설탕과자 이름(잉어, 붕어, 용 등 여러 가지가 가로 또는 세로로 연달아 적혀있다.)을 가리면,그 설탕과자를 가져가는 사행성? 게임이었다.가장 큰 설탕과자를 따볼까? 생각한 경곽이는격자판에 막대기를 놓는 모든 방법을 살펴본 후 가장 큰 설탕과자를 얻을 수 있는 방법을 알아내기 위해격자판에 막대기를 놓는 기본적인 상황을 바둑판에 바둑알 놓기처럼 만들어보고자 하였다.격자판의 세로(h), 가로(w), 막대의 개수(n)와 각 막대의 길이(l), 막대를 놓는 방향(d: 가로는 0, 세로는 1)과 막대를 놓는 막대의..
1097 : [기초-종합+배열] 바둑알 십자 뒤집기 문제 설명 아버지를 기다리던 경곽이는 검정/흰 색 바둑알을 바둑판에 꽉 채워 깔아 놓고 놀다가... "음... 이거... 십(+)자 뒤집기를 해볼까?"하고 생각하였다. 바둑판(19×1919×19)에 흰돌(11)/검정돌(00) 모두 꽉 채워놓여있을 때, nn개의 좌표를 입력받아 십(+)자 뒤집기한 결과를 출력하는 프로그램을 작성해보자.입력바둑알이 깔려 있는 상황이 19×1919×19 로 입력된다. 십자바꾸기 횟수(nn)가 입력된다. 십자바꾸기 좌표가 횟수(nn) 만큼 입력된다. 단, nn은 1010이하의 자연수이다.출력십자 바꾸기 결과를 출력한다.입력 예시0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0..
프로그램 실행구조 프로그램 기본 실행구조 컴퓨터의 기본적인 구성요소는 CPU와 메모리 그리고 하드디스크이다. 프로그램을 만들어서 배포하면 프로그램을 실행할 수 있는 파일(exe)은 기본적으로 하드디스크에 저장된다. 윈도우에서는 실행파일을 PE파일 이라고 부른다. PE파일에 프로그램을 실행하는 데 필요한 기본 정보와 파일을 메모리 어디에 저장해야 할지 알려주는 배치 정보가 들어 있다. PE파일은 헤더와 보디로 구성되는데, 헤더에 이러한 중요 정보가 들어 있고 보디에는 코드와 데이터가 들어 있다. PE파일에는 exe, dll, ocx 등 다양한 종류가 있다. PE 포맷(헤더+보디)으로 구성된 실행 파일을 클릭하면 운영체제에 있는 로더는 PE 헤더에 있는 정보를 분석해서 PE 보디에 있는 코드와 데이터를 메모리에 배치한다. 메..
어셈블리와 C언어의 포인터 구문 형식 어셈블리와 C언어의 포인터 구문 형식 예를 들어 디버거에서 이런 어셈블리 코드를 본적이 있을것이다.MOV DWORD PTR SS: [EBP-4] , 1 이게 무엇인가 하니 C언어 에서는 포인터 개념이라고 한다.--------------------------------------------------------------------------------------------------- 어셈블리 언어 C언어 Type casting DWORD PTR SS:[EBP-4] *(DWORD*)(EBP-4) DWORD (4byte)WORD PTR SS:[EBP-4] *(WORD*)(EBP-4) WORD (2byte)BYTE PTR SS:[EBP-4] *(BYTE*)(EBP-4) BYTE ----------------..
Stack Frame(스택 프레임) 프로그램에서 선언되는 로컬 변수와 함수 호출에 사용되는 스택 프레임(Stack Frame)에 대해 공부 스택 프레임이란 ESP(스택 포인터)가 아닌 - EBP(베이스 포인터) 레지스터를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법을 말한다.ESP 레지스터의 값은 프로그램 안에서 수시로 변경되기 때문에 스택에 저장된 변수, 파라미터에 접근하고자 할 때 ESP 값을 기준으로 하면 프로그램을 만들기 힘들고, CPU가 정확한 위치를 참고할 때 어려움이 생긴다.따라서 어떤 기준 시점(ex. 함수의 시작)의 ESP 값을 EBP에 저장하고 이를 함수 내에서 유지해주면 ESP값이 아무리 변하더라도 EBP를 기준으로 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근 가능 Stack Fra..
스택(Stack) 요약 스택의 고유 특성과 간단 요약 로컬 변수 저장, 함수 파라미터 전달, 복귀 주소 저장 등의 다양한 용도로 사용되는 스택 (디버깅 할때 스택 메모리를 확인하는 일이 매우 많음) 스택 메모리의 역할1. 함수 내의 로컬 변수 임시 저장2. 함수 호출 시 파라미터 전달3. 복귀 주소(return address) 전달 스택의 FIBO(First Input Last Output)구조 확인 스택의 특징 - 스택에 값을 입력하면(PUSH) 스택 포인터(ESP)는 감소하고, 스택에서 값을 꺼내면(POP) 스택 포인터는 증가한다. 이러한 스택의 특성 때문에 보통 "스택은 거꾸로 자란다"라는 표현을 쓴다.
General Purpose Register (범용 레지스터) General Purpose Register 8개의 각각의 쓰임새와 특징들 (범용 레지스터 복습겸) EAX , EBX, ECX, EDX (X자 돌림) - 주로 산술연산에 사용- ECX 는 반복문 명령어(LOOP)에서 반복 카운트(loop count)로 사용됨 (루프를 돌때마다 ECX를 1씩 감소시킴)- EAX 는 일반적으로 함수 리턴값에 사용됨 EBP, ESI, EDI, ESP (X자 아닌것들) - 주로 메모리 주소를 저장하는 포인터로 사용됨- ESP는 스택 메모리 주소를 가리킴 (스택 메모리 관리는 프로그램에서 매우 중요하기 때문에 ESP를 다른 용도로 사용하지 말아야 함)Stack Frame : EBP는 함수가 호출되었을때 그 순간의 ESP를 저장하고 있다가, 함수를 리턴하기 직전에 다시 ESP에 값..
[CODEAGATE 2017] Junior write up codegate 2017 Junior write up (Mic Check, RamG-thunder) Mic Check - 50p RamG-thunder - 465p 2월 10일날 열렸던 CODEGATE 2017 예선전에서 총 2문제를 풀었습니다. 그중 RamG라는 이름을 가진 리버싱 문제는 대회당시 실력이 부족하기도 했고 시간이 많이 없었던 관계로 대회가 끝나고 풀게되어서 본선을 못가 아쉬움이 많았던 대회였습니다. 문제는 이렇게 생겼습니다. IDA나 ollydbg 로 문제를 살펴보면 기본메뉴안에 4번을 입력할시 hidden menu 가 나오는 것을 바로 확인할 수 있었습니다. 제가 중요하게 봤었던 부분은 stage1과 stage5의 key를 입력받는 두 부분입니다. sub_405C20 함수속으로 들어가 ..