CS/SystemSoftware

    SystemSoftware - Linking #2

    SystemSoftware - Linking #2

    SystemSoftware - Linking #1 컴파일된 object 파일들을 linking해서 exe파일로 만드는 과정에서 어떤 일들이 일어나는지 알아보자 // main.c int sum(int *a, int n) int array[2] = {1, 2} int main(){ int val = sum(array, 2); return val;.. hyeo-noo.tistory.com 지난 글에 이어서 Linking을 하는 2가지 방법에 대해서 알아보자 다 쓰고 파일 날아가서 다시 씀 일반적으로 사용하는 함수의 Packaging 모든 함수를 하나의 source file에 넣는경우 : 공간과 시간측면에서 비효율적임 각각의 함수마다 나누어진 source file에 넣는 경우 : 효율적 Static librar..

    SystemSoftware - Linking #1

    SystemSoftware - Linking #1

    컴파일된 object 파일들을 linking해서 exe파일로 만드는 과정에서 어떤 일들이 일어나는지 알아보자 // main.c int sum(int *a, int n) int array[2] = {1, 2} int main(){ int val = sum(array, 2); return val; } // sum.c int sum(int *a, int n){ int i, s = 0; for(i = 0; i < n; i++){ s += a[i]; } return s; } main.c의 sum 함수는 어떤 과정을 통해서 sum.c의 sum 함수를 불러와서 기능을 수행할 수 있을까? 위와 같이 여러 개로 이루어진 파일들을 연결하는 과정을 Linking이라고 한다. 먼저 cpp(C Pre-Processor 전처리)..

    Attack Lab Solution  Phase_1 ~ Phase_5

    Attack Lab Solution Phase_1 ~ Phase_5

    - Code Injection Attacks : CTARGET %rsp를 0x38 만큼 빼주는 것으로 보아 buffer의 크기는 0x38bytes임을 알 수 있습니다. Phase1은 touch1을 호출만 하면 되므로 입력에 0x38bytes 만큼 dummy값을 준 후 touch1함수가 존재하는 주소인 40 18 c5 값을 리틀-엔디안 방식으로 입력해주었습니다. Answer : - Code Injection Attacks : CTARGET Touch2를 실행하고 %edi값과 Cookie값을 비교해서 같은 경우에 통과합니다. Touch2함수를 실행하기 전에 %rdi 레지스터에 Cookie값을 넣어주고 Touch2 함수를 실행해야 합니다. Buffer공간을 0x38만큼 할당 받은 후의 %rsp위치를 보니 0x..

    SystemSoftware - Buffer OverFlow #2

    SystemSoftware - Buffer OverFlow #2

    SystemSoftware - Buffer OverFlow #1 Buffer OverFlow 배열에 할당된 메모리 사이즈를 초과해서 사용하는경우 발생 보안 측면에서 가장 빈번하게 일어나는 이슈 중 하나 대표적인 상황 : input string의 길이를 체크하지 않을 때 가지고 있 hyeo-noo.tistory.com buffer overflow는 무슨 문제를 일으키는지 어셈블리어를 통해 좀 더 자세하게 알아보자 // echo 00000000004006cf : 4006cf: sub $0x18, %rsp 4006d3: mov %rsp, %rdi 4006d6: callq 400680 4006db: mov %rsp, %rdi 4006de: callq 400520 4006e3: add $0x18, %rsp 400..

    SystemSoftware - Buffer OverFlow #1

    SystemSoftware - Buffer OverFlow #1

    Buffer OverFlow 배열에 할당된 메모리 사이즈를 초과해서 사용하는경우 발생 보안 측면에서 가장 빈번하게 일어나는 이슈 중 하나 대표적인 상황 : input string의 길이를 체크하지 않을 때 가지고 있는 buffer보다 많은 양의 string이 들어오면 buffer overflow발생 아래 코드를 통해서 buffer overflow가 발생하면 어떤일이 생기는지 알아보자 typedef struct{ int a[2]; double d; } struct_t; double fun(int i){ volatile struct_t s; s.d = 3.14; s.a[i] = 1073741824; return s.d; } void print_fun(int to){ for(int i = 0; i

    Bomb Lab Solution Phase_1 ~ secret_phase

    Bomb Lab Solution Phase_1 ~ secret_phase

    - string comparision 0x555555556a50 에 있는 문자열이 “All your base are belong to us.” 이고, strings_not_equal함수에 해당 문자열을 넘겨주고 입력 받은 문자열과 해당 문자열을 비교해서 같으면 retq로 넘어감을 알 수 있었습니다. Answer : All your base are belong to us. - loops 6개의 숫자를 입력 받고 가장 먼저 입력 받은 수(%rsp)와 1을 비교해서 같지 않다면 bomb입니다. 따라서 첫 번째 숫자는 1임을 알 수 있었습니다. %rsp(입력 받은 배열의 첫 부분)을 %rbx에 넘겨주고 %rbp 에는 배열의 마지막 주소값을 넘겨줍니다. Loop 부분입니다. %rbx는 입력 받은 배열의 현재 in..

    SystemSoftware - Machine data(Assembly) #2

    SystemSoftware - Machine data(Assembly) #2

    구조체가 메모리에 기록되는 방식을 알아보고 어셈블리어가 어떻게 작동하는지 알아보자 struct rec{ int a[4]; size_t i; struct rec *next; }; Linked List의 메모리 구성과 어셈블리 struct rec{ int a[4]; int i; struct rec *next; }; void set_val(struct rec *r, int val){ while(r){ int i = r->i; r->a[i] = val; r = r->next; } } set_val 함수의 while문에 대한 어셈블리어를 알아보자 // %rdi = r // %rsi = val .L11: moveslq 16(%rdi), %rax// %rax에 i값(시작주소 r에서 16만큼 떨어진) 을 넣어준다 mo..

    SystemSoftware - Machine data(Assembly) #1

    SystemSoftware - Machine data(Assembly) #1

    C언어에서 다루었던 포인터연산을 통한 변수 값 참조와 다차원 배열의 특정 위치의 값을 참조하는 방식을 어셈블리어를 통해 깊게 알아보자 int val[5]; 라는 정수형 배열이 있다고 생각해보자 주소값 x x + 4 x + 8 x + 12 x + 16 값 1 5 2 1 3 배열의 메모리 값까지 생각 한다면 위와 같이 구성 되어있을 것이다 x = 배열의 시작주소 예제 1) Reference Type Value val[4] int 3 val int * x val + 1 int * x + 4 &val[2] int* x + 8 val[5] int - *(val+1) int 5 C to Assembly 1. int pnu[5] = {1, 5, 2, 1, 3}; int get_digit(int z[], int id)..

    SystemSoftware - float #2

    SystemSoftware - float #2

    Float 자료형에 대해서 2 소수점을 가지는 자료형은 rounding 에 민감하다! 마지막 숫자가 5인 경우 반올림 이후의 숫자에 따라서 결정된다 위 Binary들은 모두 소수 3번째 자리에서 반올림을 하려고 준비중이다 1번은 소수 3번째 자리가 0이므로 내림이 적용된다. 2번은 소수 3번째 자리가 1이고 4번째 자리도 1이므로(절반보다 크다!) 올림이 적용된다. 3번은 소수 3번째 자리가 1이고 올림을 할 경우 소수 2번째 자리가 0이되어 짝수가 되므로 올림이 적용된다. 4번은 소수 3번째 자리가 1이고 올림을 할 경우 소수 2번째 자리가 1이 되어 홀수가 되므로 내림이 적용된다. Practice Value Binary Fraction Exponent 128 10000000 1.0000000 7 15..

    SystemSoftware - float #1

    SystemSoftware - float #1

    Float 자료형에 대해서 1 ex ) $$ 0.111111111..._2 = 1.0 $$ float 자료형은 sign bit를 나타내는 S exponential을 나타내는 exp fractional value를 나타내는 frac 부분으로 나눌 수 있다 Normalized value exp != 0 || exp != 11111111...1 E = exp - bias $$Bias = 2^ k / 2 -1$$ M 은 소수점 아래 부분에 그대로 들어가게 된다. float F = 15213.0 을 예시로 알아보자 15213 = 11101101101101 = 1.1101101101101 * 2^13 M = 1101101101101 frac = 11011011011010000000000 E = 13 Bias = 1..