2024. 2. 12. 21:26ㆍ시스템 해킹
C언어는 써본 적이 없어서 환경설정부터 해주었다.
https://blog.naver.com/nms200299/222129689157
1. 스택(POP, PUSH, PEEK 구현)
우선 C언어에는 리스트라는게 없고 배열?이라는 것만 있다고 한다..
그래서 구조체로 스택처럼 보이는 배열을 만들어 준 후 스택처럼 사용해주면 된다.
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
// 스택 구조체 정의
typedef struct {
int items[MAX_SIZE];
int top;
} Stack;
class 같은 느낌으로 Stack 클래스를 만들어준 느낌. 안에는 item이라는 배열과 top이라는 정수형변수가 있음.
// 스택 초기화 함수
void initialize(Stack *s) {
s->top = -1;
}
void는 반환하는 값이 없는 함수를 의미. top을 -1로 만들어줌.
배열안에 값이 여전히 있더라도 포인터(top)이 -1에 있으면 그 값들 안씀.
Stack *s는 Stack의 주소를 s로 저장한 매개변수.
// 스택이 비어있는지 확인하는 함수
int isEmpty(Stack *s) {
return (s->top == -1);
}
// 스택이 가득 찼는지 확인하는 함수
int isFull(Stack *s) {
return (s->top == MAX_SIZE - 1);
}
isEmpty이거나 isFull이면 True(1)을 반환해주는 함수.
// 스택에 요소를 추가하는 PUSH 함수
void push(Stack *s, int value) {
if (isFull(s)) {
printf("Stack overflow\n");
return;
}
s->items[++(s->top)] = value;
}
요소를 추가하기전 이미 isFull이면 "Stack overflow" 출력 후 함수 나옴.
아닐 경우 top+=1 해주고 item[top]=value해주기. (파이썬으로 설명하기...파이썬 보고싶다)
// 스택에서 요소를 삭제하고 반환하는 POP 함수
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack underflow\n");
exit(1);
}
return s->items[(s->top)--];
요소를 삭제하기전 이미 isEmpty이면 "Stack underflow" 출력 후 함수 나옴.
아닐 경우 print(item[top])해주고 top-=1 해주기.
// 스택의 맨 위 요소를 반환하는 PEEK 함수
int peek(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty\n");
exit(1);
}
return s->items[s->top];
}
스택이 이미 비었다면 "Stack is empty" 출력후 exit.
아니라면 print(item[top])해주기.
int main() {
Stack s;
initialize(&s);
// 스택에 요소 추가
push(&s, 3);
push(&s, 5);
push(&s, 10);
// 스택에서 요소 삭제 및 출력
printf("Popped element: %d\n", pop(&s));
// 스택의 맨 위 요소 확인
printf("Top element: %d\n", peek(&s));
return 0;
}
출력값
Popped element: 10
Top element: 5
2. Stack
: 후입선출(LIFO) 데이터 구조
3. Stack Frame
: 프로그램 중 함수가 호출될 때 일어나는 스택의 변화. 각 함수 호출은 새로운 스택 프레임을 생성, 이전 스택 프레임 위에 쌓임.
함수가 이렇게 실행 될 때,
스택프레임은 이렇게 변화함.
4. Stack Register
: CPU 내부의 레지스터 중 하나. 현재 스택 프레임의 맨 위에 위치한 메모리 주소. ==Stack Pointer
'시스템 해킹' 카테고리의 다른 글
[시스템 해킹] 드림핵_Shellcode (3) | 2024.03.01 |
---|---|
[프로젝트] AI를 활용한 악성코드 분류기_트로이 목마란 (0) | 2024.02.24 |
[시스템 해킹] 02-2. Computer Science-x86 Assembly (0) | 2024.01.28 |
[시스템 해킹] 02-1. Computer Science-Linux Memory Layout (1) | 2024.01.28 |
[시스템 해킹] 02. Computer Science-Computer Architecture (0) | 2024.01.28 |