
Background: Calling Convention # 서론 1. 함수 호출 규약 함수 호출 규약: 함수의 호출 및 반환에 대한 약속 한 함수에서 다른 함수를 호출할 때, 프로그램 실행 흐름은 다른 함수로 이동함 호출한 함수가 반환하면, 다시 원래의 함수로 돌아와서 기존의 실행 흐름을 이어나감 함수를 호출할 때는 반환된 이후를 위해 호출자(Caller)의 상태(Stack Frame) 및 반환 주소(Return Address)를 지정해야 함 호출자는 피호출자(Callee)가 요구하는 인자를 전달해줘야 하며, 피호출자의 실행이 종료될 때는 반환 값을 전달받아야 함 2. 함수 호출 규약 종류 컴파일러는 지원하는 호출 규약 중, CPU 아키텍처에 적합한 것을 선택함 x86(32bit) 아키텍처는 레지스터를 ..

shell_basic 입력한 셸코드를 실행하는 프로그램입니다. main 함수가 아닌 다른 함수들은 execve, execveat 시스템 콜을 사용하지 못하도록 하며, 풀이와 관련이 없는 함수입니다. flag 위치와 이름은 /home/shell_basic/flag_name_is_loooooong입니다. # 문제 분석 - execve, execveat 시스템 콜을 사용하지 못하므로 orw 셸코드를 생각해 볼 수 있다 💡 orw 셸코드란? 파일을 열고, 읽은 뒤 화면에 출력해주는 셸코드 [참고] 2022.04.03 - [System hacking/system hacking] - [Dreamhack] Exploit Tech: Shellcode # exploit from pwn import * context.ar..

Chapter 06. 파일 시스템 리눅스 프로그래밍 원리와 실제 - 창병모 교수님 6.1 파일 시스템 1) 파일 시스템 구조 - 부트 블록(Boot block) 파일 시스템 시작부 위치, 첫 번째 섹터 차지 유닉스/리눅스가 처음 시작될 때 사용되는 부트스트랩 코드가 저장되는 블록 - 슈퍼 블록(Super block) 전체 파일 시스템에 대한 정보 저장 파일 시스템 내의 총 블록 수, 사용 가능한 i-노드 개수, 사용 가능한 블록들을 나타내는 비트 맵, 블록의 크기, 사용 중인 블록 수, 사용 가능한 블록 수 - i-리스트(i-list) 각각의 파일을 나타내는 i-노드들의 리스트 한 블록은 약 40개 정도의 i-노드 포함 - 데이터 블록(Data block) 파일의 내용(데이터)을 저장하기 위한 블록 2)..

[문제] Equal Stacks | HackerRank Equalize the piles! www.hackerrank.com [문제 설명] - 그림을 보니 push된 반대 순서대로 pop이 되는 것을 확인할 수 있음 - 반환 값은 각각 pop하며 스택에 남은 수의 합이 같아지는 순간 그 합을 리턴함 [문제 풀이] - stack과는 다르게 아래서 깔린 수부터 pop되므로 reverse함수를 통해 순서를 변경해주어야 함 - sum 함수를 선언하여 각 벡터의 원소의 합을 각각 구함 - 세 합이 같은 수가 될때까지 각각의 합을 감소시켜 같은 수가 될 때까지 반복함 - 같은 수가 되는 순간 그 수를 반환시킴 [코드] int sum(vector a){ int sum=0; for(int i=0;im){ a-=h1.b..

# Deque - double-ended queue - 후단(rear)으로만 데이터를 삽입할 수 있었던 기존 선형 큐, 원형 큐와 달리 큐의 전단(front) 와 후단(rear)에서 모두 삽입과 삭제가 가능한 큐 * 데이터 삽입: front 감소, rear 증가 * 데이터 삭제: front 증가, rear 감소 # Abstract Data Type in deque 1) 매크로 및 타입 재정의 - boolean: 참과 거짓을 return하는 함수 및 변수들을 위해 정의 - 원하지 않는 곳에서 함수가 종료될 시 return 값 통일을 위해 ERROR(-1) 정의 - int type 이외에 다른 type에도 사용하기 위해 element로 type을 정의 #define TRUE 1 #define FALSE 0 ..
# 재귀 호출의 개념 - 재귀 호출: 함수가 실행 중에 자기 자신을 다시 호출하는 상황 - 종료 조건을 가지는 동일한 task가 반복될 때 가능 // 종료 조건: 함수가 끝나야하기 때문에 필요 > 종결 조건은 재귀 호출에 반드시 포함되어야하며 잘못 설정할 경우 프로그램이 무한 반복에 빠질 수 있음 - 시스템 입장에서는 새로운 함수가 불리는 것과 같음 - 함수 실행 중 또 다른 함수가 실행되면 함수의 컨텍스트(context), 정보(지역변수, 복귀주소)를 활성 레코드(activation record)에 저장하여 보관하여야 함 - 활성 레코드는 함수의 환경 정보를 담고 있는 구조체이며 실행되는 함수마다 1개씩 생성되어 시스템 스택에서 저장 관리됨 - 시스템 스택은 함수 호출을 관리하기 위해 프로그램에서 사용..