분류 전체보기
-
Assembly로 뭘 할 수 있을까? 나는 생각했다 내가 입력한걸 10번 출력해주는 그런 것을 그래서 만들어 보았다 코드 section .text global _start _start: mov rsi, rsp sub rsi, 0x10 mov rdx, 0x10 xor rdi, rdi xor rax, rax syscall ;write mov r10, 1 again: cmp r10, 10 je done inc r10 mov rax, 1 mov rdi, 1 syscall jmp again ;finish done: mov rax, 0x3c mov rdi, 0 syscall 처음에 배울 때 "대체 왜?? 저렇게 하는 거지??"라고 생각했던 것들이 이젠 하루 지나니 조금은 이해가 되었나 보다 위의 코드는 처음으로 내..
[Assembly] 반복문Assembly로 뭘 할 수 있을까? 나는 생각했다 내가 입력한걸 10번 출력해주는 그런 것을 그래서 만들어 보았다 코드 section .text global _start _start: mov rsi, rsp sub rsi, 0x10 mov rdx, 0x10 xor rdi, rdi xor rax, rax syscall ;write mov r10, 1 again: cmp r10, 10 je done inc r10 mov rax, 1 mov rdi, 1 syscall jmp again ;finish done: mov rax, 0x3c mov rdi, 0 syscall 처음에 배울 때 "대체 왜?? 저렇게 하는 거지??"라고 생각했던 것들이 이젠 하루 지나니 조금은 이해가 되었나 보다 위의 코드는 처음으로 내..
2022.09.22 -
Assembly Hello World section .data msg db "hello world"; data 영역에 msg라는 포인터 변수가 Hello world의 주소를 갖는다 section .text global_start; text영역에 start함수 정의 _start: mov rax, 1; rax에 1입력 (System Call Write) mov rdi, 1; rdi에 1입력 (unsigned int fd) mov rsi, msg; rsi에 데이터 영역에 있는 포인터 변수 msg입력 (const char *buf) mov rdx, 12; mov rdx, 12 (문자열의 글자 수) syscall; System Call (sys_write) mov rax, 60; rax에 60입력 (System ..
[Assembly] Hello world 출력Assembly Hello World section .data msg db "hello world"; data 영역에 msg라는 포인터 변수가 Hello world의 주소를 갖는다 section .text global_start; text영역에 start함수 정의 _start: mov rax, 1; rax에 1입력 (System Call Write) mov rdi, 1; rdi에 1입력 (unsigned int fd) mov rsi, msg; rsi에 데이터 영역에 있는 포인터 변수 msg입력 (const char *buf) mov rdx, 12; mov rdx, 12 (문자열의 글자 수) syscall; System Call (sys_write) mov rax, 60; rax에 60입력 (System ..
2022.09.18 -
구조 그림 1편에서 Data Segment까지 했었다 이번 편은 BSS, Heap, Stack을 다뤄 보려고 한다 Bss Segment 컴파일 시에 초기화 되지 않은 전역 변수들이 위치하는 곳이다. 프로그램이 실행되면 모든 값은 0으로 초기화된다 읽기, 쓰기 권한이 부여됨 Stack Stack과 Heap은 상황에 맞게 확장해가는 Segment이다.Stack Segment는 Stack Frame이라는 단위로 사용는데, 이 Stack Frame은 함수 호출 시마다 생성되고 반환될 때 해제된다. 읽기, 쓰기 권한이 부여됨 Heap C언어에서 malloc(), calloc()과 같은 함수를 통해 동적으로 할당받는 메모리가 위치하는 곳 읽기, 쓰기 권한 부여 정리 Code Segment Data Rodata Bs..
[Linux] 리눅스의 메모리 구조 (2)구조 그림 1편에서 Data Segment까지 했었다 이번 편은 BSS, Heap, Stack을 다뤄 보려고 한다 Bss Segment 컴파일 시에 초기화 되지 않은 전역 변수들이 위치하는 곳이다. 프로그램이 실행되면 모든 값은 0으로 초기화된다 읽기, 쓰기 권한이 부여됨 Stack Stack과 Heap은 상황에 맞게 확장해가는 Segment이다.Stack Segment는 Stack Frame이라는 단위로 사용는데, 이 Stack Frame은 함수 호출 시마다 생성되고 반환될 때 해제된다. 읽기, 쓰기 권한이 부여됨 Heap C언어에서 malloc(), calloc()과 같은 함수를 통해 동적으로 할당받는 메모리가 위치하는 곳 읽기, 쓰기 권한 부여 정리 Code Segment Data Rodata Bs..
2022.09.18 -
리눅스의 메모리 구조 Linux의 메모리 구조에는 Code 세그먼트, Data 세그먼트, BSS 세그먼트, Heap 세그먼트, Stack 세그먼트 이렇게 5가지의 세그먼트가 있다. 각 세그먼트마다 읽기, 쓰기, 실행에 대한 권한이 부여되어 있어 취약점을 어느 정도 방지할 수 있다. Code 세그먼트 Text 세그먼트라고도 불리며, 프로그램에서 실행 가능한 코드가 Text 세그먼트에 위치하게 된다. 코드 세그먼트는 CPU가 코드를 읽고 실행할 수 있도록 읽기 권한과 실행 권한이 부여된다. 하지만 쓰기 권한은 부여되지 않는다 왜일까? 누군가가 악의 적으로 실행 흐름을 바꿀 수도 있기 때문에 쓰기 권한은 부여되지 않는다고 한다 Data 세그먼트 Data 세그먼트는 컴파일 할때 코드에서 초기화된 전역 변수또는 ..
[Linux] 리눅스의 메모리 구조 (1)리눅스의 메모리 구조 Linux의 메모리 구조에는 Code 세그먼트, Data 세그먼트, BSS 세그먼트, Heap 세그먼트, Stack 세그먼트 이렇게 5가지의 세그먼트가 있다. 각 세그먼트마다 읽기, 쓰기, 실행에 대한 권한이 부여되어 있어 취약점을 어느 정도 방지할 수 있다. Code 세그먼트 Text 세그먼트라고도 불리며, 프로그램에서 실행 가능한 코드가 Text 세그먼트에 위치하게 된다. 코드 세그먼트는 CPU가 코드를 읽고 실행할 수 있도록 읽기 권한과 실행 권한이 부여된다. 하지만 쓰기 권한은 부여되지 않는다 왜일까? 누군가가 악의 적으로 실행 흐름을 바꿀 수도 있기 때문에 쓰기 권한은 부여되지 않는다고 한다 Data 세그먼트 Data 세그먼트는 컴파일 할때 코드에서 초기화된 전역 변수또는 ..
2022.09.18 -
Directoru Command pwd: 현재 작업 디렉토리 확인 cd : 작업 디렉토리 변경 ls : 디렉토리 내용 확인 mkdir : 디렉토리 생성 rmdir : 디렉토리 제거 mv : 디렉토리 이름 변경 mv : 디렉토리 이동 cp : 디렉토리 복사 ls ls [확인할 디렉토리] : 디렉토리 내용 확인 -a : 숨겨진 파일까지 모두 표시 -l : 더 자세한 결과 출력 A : 파일에 대한 접근 권한 B : 하드 링크 수 C : 파일의 소유자 UID D : 파일 관리 그룹 GID E : 파일의 크기 (파일 이름 앞에 [ . ]이 붙어 있으면 숨김 파일이 됨) mkdir mkdir : 폴더 생성 -p : 하위 구조도 함께 생성 rmdir rmdir [삭제할 디렉토리 이름] : 디렉토리 안에 뭔가가 있으면..
[Linux] Directory CommandDirectoru Command pwd: 현재 작업 디렉토리 확인 cd : 작업 디렉토리 변경 ls : 디렉토리 내용 확인 mkdir : 디렉토리 생성 rmdir : 디렉토리 제거 mv : 디렉토리 이름 변경 mv : 디렉토리 이동 cp : 디렉토리 복사 ls ls [확인할 디렉토리] : 디렉토리 내용 확인 -a : 숨겨진 파일까지 모두 표시 -l : 더 자세한 결과 출력 A : 파일에 대한 접근 권한 B : 하드 링크 수 C : 파일의 소유자 UID D : 파일 관리 그룹 GID E : 파일의 크기 (파일 이름 앞에 [ . ]이 붙어 있으면 숨김 파일이 됨) mkdir mkdir : 폴더 생성 -p : 하위 구조도 함께 생성 rmdir rmdir [삭제할 디렉토리 이름] : 디렉토리 안에 뭔가가 있으면..
2022.09.04 -
linux 기본 구성요소 쉘 : 명령어를 커널이 알아들을 수 있는 언어로 바꿔주는 일을 함 Kernel(커널) : 컴퓨터 자원을 관리하는 역할 메모리 관리 프로세스 관리 장치 드라이버 시스템 호출 및 보안 명령어 : 우리가 입력하는 명령어는 하나의 프로그램이다 Prompt 컴퓨터가 입력을 기다리고 있음을 가리키기 위해 화면에 나타나는 표시 일반적으로 리눅스의 Prompt는 현재 작업 디렉터리, 현재 로그인한 사용자 등에 대한 정보 표시 명령줄 인터페이스 -> 텍스트 터미널을 통해 사용자와 컴퓨터가 상호 작용하는 방식을 뜻함 -> 즉, 작업 명령은 사용자가 컴퓨터 키보드 등을 통해 문자열의 형태로 입력하며 컴퓨터로부터의 출력 역시 문자열 형태로 주어짐 -> 명령어의 구조 명령어 : 시스템에서 특정 작업을 ..
[Linux] 기본 환경linux 기본 구성요소 쉘 : 명령어를 커널이 알아들을 수 있는 언어로 바꿔주는 일을 함 Kernel(커널) : 컴퓨터 자원을 관리하는 역할 메모리 관리 프로세스 관리 장치 드라이버 시스템 호출 및 보안 명령어 : 우리가 입력하는 명령어는 하나의 프로그램이다 Prompt 컴퓨터가 입력을 기다리고 있음을 가리키기 위해 화면에 나타나는 표시 일반적으로 리눅스의 Prompt는 현재 작업 디렉터리, 현재 로그인한 사용자 등에 대한 정보 표시 명령줄 인터페이스 -> 텍스트 터미널을 통해 사용자와 컴퓨터가 상호 작용하는 방식을 뜻함 -> 즉, 작업 명령은 사용자가 컴퓨터 키보드 등을 통해 문자열의 형태로 입력하며 컴퓨터로부터의 출력 역시 문자열 형태로 주어짐 -> 명령어의 구조 명령어 : 시스템에서 특정 작업을 ..
2022.09.03 -
TCP와 UDP란 무엇인가 나의 프로그램과 다른 컴퓨터에 있는 프로그램이 통신하기 위해 필요한 것이다 4 계층 프로토콜이다 인터넷상에서 데이터를 메시지 형태로 보내시 위해 IP와 함께 사용하는 프로토콜 일반적으로 TCP와 IP를 함께 사용하는데, IP가 데이터를 배달하는 업무를 한다면 TCP는 패킷을 추적 및 관리하는 업무를 맡는다. TCP는 연결형 서비스를 지원하는 프로토콜로 인터넷 환경에서 기본으로 사용한다 UDP가 비연결형 서비스를 지원하는 프로토콜 인터넷 환경에서 기본으로 사용한다 TCP 특징 연결형 서비스로 가상 회선 방식을 제공 3-way handshaking 과정을 통해 연결을 설정하소 4-way handshaking을 통해 해제한다 흐름 제어 혼잡 제어 높은 신뢰성을 보장한다 UDP보다 속..
[Network] TCP, UDPTCP와 UDP란 무엇인가 나의 프로그램과 다른 컴퓨터에 있는 프로그램이 통신하기 위해 필요한 것이다 4 계층 프로토콜이다 인터넷상에서 데이터를 메시지 형태로 보내시 위해 IP와 함께 사용하는 프로토콜 일반적으로 TCP와 IP를 함께 사용하는데, IP가 데이터를 배달하는 업무를 한다면 TCP는 패킷을 추적 및 관리하는 업무를 맡는다. TCP는 연결형 서비스를 지원하는 프로토콜로 인터넷 환경에서 기본으로 사용한다 UDP가 비연결형 서비스를 지원하는 프로토콜 인터넷 환경에서 기본으로 사용한다 TCP 특징 연결형 서비스로 가상 회선 방식을 제공 3-way handshaking 과정을 통해 연결을 설정하소 4-way handshaking을 통해 해제한다 흐름 제어 혼잡 제어 높은 신뢰성을 보장한다 UDP보다 속..
2022.08.27 -
데이터 조각화란? 일단 데이터 조각화에 대해서 알아보기 전 MTU에 대해서 알 필요가 있다. MTU란? 네트워크에 연결된 장치가 받아들일 수 있는 최대 데이터 크기를 말한다 최대 MTU 크기는 1500 Btye 본론으로 넘어가서 데이터 조각화란 MTU에 설정한 최대 크기보다 큰 데이터가 들어왔을 때 데이터를 나눠 서 보낸다는 말이다 데이터 조각화 계산 방법 문제 : 크기가 4800인 데이터를 보내고 싶다. 그런데 MTU의 최대 크기가 1500 일 때 패킷이 몇 개로 나누어 보내지는가??? 일단 우리가 생각해야 할 것이 하나 있다 그것은 마지막에 나누어진 패킷에 각각 ipv4를 추가해줘야 한다 그래서 4800 % 1480(1500 - ipv4) = 총 4개가 나오며 마지막 패킷의 데이터 크기는 360이고 ..
[Network]데이터 조각화데이터 조각화란? 일단 데이터 조각화에 대해서 알아보기 전 MTU에 대해서 알 필요가 있다. MTU란? 네트워크에 연결된 장치가 받아들일 수 있는 최대 데이터 크기를 말한다 최대 MTU 크기는 1500 Btye 본론으로 넘어가서 데이터 조각화란 MTU에 설정한 최대 크기보다 큰 데이터가 들어왔을 때 데이터를 나눠 서 보낸다는 말이다 데이터 조각화 계산 방법 문제 : 크기가 4800인 데이터를 보내고 싶다. 그런데 MTU의 최대 크기가 1500 일 때 패킷이 몇 개로 나누어 보내지는가??? 일단 우리가 생각해야 할 것이 하나 있다 그것은 마지막에 나누어진 패킷에 각각 ipv4를 추가해줘야 한다 그래서 4800 % 1480(1500 - ipv4) = 총 4개가 나오며 마지막 패킷의 데이터 크기는 360이고 ..
2022.08.23 -
문제 처음 내가 생각한 코드 import sys m, n = map(int, sys.stdin.readline().split()) for i in range(m, n+1): count = 0 if i == 1: continue for j in range(2, int(i ** 0.5)+1): if i % j == 0: count += 1 if count == 1: break; if count == 0: print(i) 맞았다 분명 맞았는데 찝찝하다 난생처음 보는 시간이다 6256ms 나는 어떻게 이 시간을 줄일 수 있을까 생각하다 도저히 모르겠어서 다른 사람의 답을 보았다 그렇다..... 답을 봐 버렸다 하지만 내 마음속은 시원했다 양심의 가책이 느껴진다 다른 사람의 코드 def prime(s, e): a..
[Algorithm] 백준 1929문제 처음 내가 생각한 코드 import sys m, n = map(int, sys.stdin.readline().split()) for i in range(m, n+1): count = 0 if i == 1: continue for j in range(2, int(i ** 0.5)+1): if i % j == 0: count += 1 if count == 1: break; if count == 0: print(i) 맞았다 분명 맞았는데 찝찝하다 난생처음 보는 시간이다 6256ms 나는 어떻게 이 시간을 줄일 수 있을까 생각하다 도저히 모르겠어서 다른 사람의 답을 보았다 그렇다..... 답을 봐 버렸다 하지만 내 마음속은 시원했다 양심의 가책이 느껴진다 다른 사람의 코드 def prime(s, e): a..
2022.08.13 -
문제 맞았지만 오래 걸린 코드 m = int(input()) n = int(input()) result = 0 min = 0 for i in range(m, n+1): count = 0 for j in range(2, i+1): if i % j == 0: count += 1 if count == 2: break; if count == 1: result += i if min == 0: min = i if min == 0: print(-1) else: print(result, min) 왜 이렇게 오래 걸린 걸까? 그 이유는 9번째 줄 때문이다 for j in range(2, i+1) 여기부분이 i + 1까지 전부 다 돌기 때문이다 그럼 왜 i + 1까지 돌 필요가 없는 걸까? 소수(素數, prime numb..
[Algorithm] 백준 2581 소수문제 맞았지만 오래 걸린 코드 m = int(input()) n = int(input()) result = 0 min = 0 for i in range(m, n+1): count = 0 for j in range(2, i+1): if i % j == 0: count += 1 if count == 2: break; if count == 1: result += i if min == 0: min = i if min == 0: print(-1) else: print(result, min) 왜 이렇게 오래 걸린 걸까? 그 이유는 9번째 줄 때문이다 for j in range(2, i+1) 여기부분이 i + 1까지 전부 다 돌기 때문이다 그럼 왜 i + 1까지 돌 필요가 없는 걸까? 소수(素數, prime numb..
2022.08.12