CS

    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..