Stack

    [Dreamhack] x86 Assembly (2) 정리

    자료구조인 스택, C언어의 함수에 대응되는 프로시저, 시스템콜에 관한 어셈블리 내용이다. 스택 push val : val을 스택 최상단에 쌓음 pop reg : 스택 최상단의 값을 꺼내서 reg에 대입 프로시저 Procedure는 특정 기능을 수행하는 코드 조각을 말한다. 프로시저를 사용하면 반복되는 연산을 프로시저 호출로 대체할 수 있는 장점이 있다. 그리고 기능별로 코드 조각에 이름을 붙여 가독성을 높일 수 있다. 프로시저를 부르는 행위를 호출(Call)이라고 하고, 돌아오는 것을 반환(Return)이라 한다. 프로시저를 실행 하고 나서 원래 실행 흐름으로 돌아와야 하므로 call 다음의 명령어 주소 즉, 반환 주소(return address)를 스택에 저장하고 프로시저로 rip를 이동시킨다. cal..

    [Dreamhack] Linux Memory Layout 정리

    CPU가 필요한 데이터를 읽고 처리하는데, 연산의 결과를 메모리 다시 적재를 한다. 그래서 CPU의 동작과 메모리 사이의 관련은 크고, 메모리 값의 조작으로 CPU의 잘못된 동작을 유도 할 수 있다. 이 오염된 메모리를 메모리 오염 취약점이라고 한다. (드림핵 커리큘럼에서는 메모리 오염에 관련 취약점을 공부함) 리눅스 프로세스의 메모리 구조 리눅스에서 프로세스는 크게 5가지의 세그먼트(Segment)로 구분한다. 세그먼트 : 적재되는 데이터의 용도별로 메몰의 구획을 나눈 것. 용도별로 나누어, 용도에 맞게 적절한 권한이 부여 되는데, 이 권한은 읽기, 쓰기, 실행이 존재하며, CPU는 이 권한이 부여된 행위만 할 수 있다. 코드(Text) 세그먼트(Code Segment) - 실행 가능한 기계코드가 위치..

    [백준] 런타임 에러 OutOfBounds, 메모리 초과 / 10950 A + B -3

    [백준] 런타임 에러 OutOfBounds, 메모리 초과 / 10950 A + B -3

    문제 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10) 출력 각 테스트 케이스마다 A+B를 출력한다. 풀이 및 코드 해당 문제는 케이스의 개수 T를 입력받는게 주 관건이다. 문제에서 케이스의 개수를 정확히 정해주지 않았기 때문이다. 그래서 배열을 사용하여, T가지의 경우의 수를 받아 들이려고 할 때, 케이스의 개수를 잘 정해주지 않으면 런타임 에러 중 OutOfBounds가 발생한다. 런타임 에러란? 프로그램이 비정상적으로 종료된 경우입니다. 그리고 OutOfBounds는 이렇게, 컨테이너 또는 배열에서 할당된 경계를 넘..