- Today
- Total
목록전체 글 (161)
Byeo
급히 성남에서 대전까지 하루 만에 다녀와야 할 일이 생겨서 어쩌다 이용하게 되었다. 대전에서 성남으로 올라올 때, 대전에서 동탄까지 SRT를 이용하고 동탄에서 판교까지 지난 3월 30일에 개통한 GTX-A를 탑승하였다. 동탄에서 성남역 (판교역과 이매역 중간)까지 약 12분 소요! 엄청난 속도다! 동탄역 SRT를 이용해 동탄에서 하차하면 곧바로 GTX-A로 환승할 수 있게 연결되어 있다. 바로 교통카드를 찍고 입장하면 된다! 역 구성은 아주 심플하다. 동탄에서 곧바로 성남, 그다음 역이 수서역이다. 추후에 구성역이 개통될 예정이라고 한다. 동탄에 분포한 삼성전자와 판교에 분포한 IT기업들의 교류(이직?)가 더 쉬워질라나? GTX 개통 기념 현수막이 걸려있다! 내부 23시 13분 차를 탑승했는데, 사람이 ..
이전 포스트: https://byeo.tistory.com/entry/socket-system-call socket system call 1int socket(int domain, int type, int protocol); socket 시스템 콜의 동작을 한 번 들여다 봅니다! https://man7.org/linux/man-pages/man2/socket.2.html linux 5.15 기준입니다. 1. syscall_64.tbl 이전 포스트에서 리눅스 시스템 콜byeo.tistory.com 5. inet_create (net/ipv4/af_inet.c:248)사실 address family가 달라지면 호출될 함수가 달라지겠죠. 예를 들어서 AF_INET6을 지정했다면 inet6_create가 ..
int socket(int domain, int type, int protocol); socket 시스템 콜의 동작을 한 번 들여다봅니다! https://man7.org/linux/man-pages/man2/socket.2.html linux 5.15 기준입니다. 1. syscall_64.tbl 이전 포스트에서 리눅스 시스템 콜을 추가하면 서 확인했던 점은 시스템 콜의 시작 부분이 syscall_64.tbl에 등록되어 있다는 점이었습니다. 마찬가지로 linux 5.15 기준으로 socket 함수를 찾아봅니다. ... 40commonsendfilesys_sendfile64 41commonsocketsys_socket 42commonconnectsys_connect ... 이는 마찬가지로 syscalls.h..
설명은 나중에... 굉장히 난이도가 높은 문제인 듯 싶다. 특히 dfs()를 최대한 잘 추려내지 않으면 대부분 timeout난다. #include #include #include #include using namespace std; #define MAX_FLOW 2147483646 #define NODE 500 #define SOURCE (NODE + 1) #define SINK (SOURCE + 1) #define MAX_NODE (SINK + 1) vector adj[MAX_NODE]; int flow[MAX_NODE][MAX_NODE]; int N; bool bfs(int start, int end, int* level_graph) { queue q; q.push(start); level_graph..
한 달 만에 가는 산행, 7번째로 북한산을 선택했다. 북한산 초입에서부터 백운대까지 2시간 0분 소요. ※ 해빙기 암장조사 때문에 24년 3월 25일 ~ 24년 4월 7일은 백운대 출입이 금지됩니다. 경로 빨간색: 등산길 파란색: 하산길 물리적으로 도봉산과 거의 붙어있다. 도봉산 등산 때도 느꼈는데, 북한산 도봉산 둘 다 암벽이 참 아름답다. 사진 좌측부터 고도가 높아지는 순. 저 멀리에 있는 산의 눈은 녹지 않았다. 약 700m 즈음 쉼터에서 여유롭게 누워있는 누렁이랑 한 장 쉴 새 없이 오르면 북한산 산성에 도착한다. 약 800m즈음 되는 등산길일 텐데, 오르는 길에 평지는 거의 없다! 암벽 등반 남은 0.3km (고도는 약 60m쯤?) 은 줄 하나를 잡고 클라이밍을 해야 한다. 우뚝 솟은 산이라 그..
지난 포스트에서 추가한 리눅스 시스템콜을 사용하기 위해서는 위에서 기술된 2번 항목처럼 syscall에 syscall_no를 넣어주면서 호출을 했어야 했는데요. C언어에서 byeo_hello(string, strlen)을 직접 호출하고 싶으면 어떻게 해야 할까요? 그 방법은 사실 커널보다는 glibc의 수정에 있었습니다. 이번 포스트에서는 시스템콜 함수명을 직접 이용해 호출할 수 있도록 설정을 해볼 예정입니다. 0. syscall( ) 흐름 시작 전에, syscall() 함수는 어떻게 실행될지 잠깐 살펴보려고 합니다. 이 함수는 glibc의 sysdeps/unix/sysv/linux/x86_64/syscall.S에 있는 함수입니다. 해당 함수는 syscall number를 별도의 register에 빼낸 ..
QEMU를 통해 생성한 VM이 외부와 통신이 가능하도록 설정해 봅니다. 1. QEMU script 작성qemu를 실행하는 스크립트를 다음과 같이 작성합니다.#!/bin/bashqemu-system-x86_64 \ -m 2G \ -smp cores=4 \ -kernel ./arch/x86/boot/bzImage \ -drive file=image/ubuntu-from-debootstrap.img,format=raw \ -append "root=/dev/sda rw console=ttyS0" \ -netdev tap,id=byeonet0,ifname=byeotap0 \ -device e1000,netdev=byeonet0..
개요 리눅스 코드를 살펴보고 구현해보는 과정을 간단히 체험해보기 위해서 가장 쉬운 시스템 콜 추가하기를 해봅니다. 해당 과정을 위해 [블로그]와 [커널 문서]를 참고하였습니다. 커널 문서에서는 시스템 콜 구현 디자인 가이드라인을 제공하고 있습니다. 내용 1. syscall_64.tbl linux-5.15/arch/x86/entry/syscalls/syscall_64.tbl 파일에는 x86 아키텍쳐에서 사용할 수 있는 시스템콜이 나열되어 있습니다. 형태는 다음과 같습니다. # The format is: # 가장 마지막에 있는 448 다음에 우리가 추가할 시스템 콜 이름과 실제 커널 내에서 호출할 함수 명을 나열해줍시다. 449commonbyeo_hellosys_byeo_hello 2. sys_byeo_he..
설명은 나중에... #include #include #include #include using namespace std; #define MAX_NODE (50 * 2 + 1) #define START (MAX_NODE + 1) #define END (START + 1) #define MAX_SIZE (END + 1) #define INFINITY_FLOW 99999 #define MIN(a, b) a < b? a: b int N; int SUM; vector adj[MAX_SIZE]; int flow[MAX_SIZE][MAX_SIZE]; int tmp_flow[MAX_SIZE][MAX_SIZE]; int max_val = 0; int bfs(int start, int end) { queue q; int ..
개요 VSCode를 통해서 linux source code를 살펴보려고 C/C++ extension을 설치했습니다. 그래도 여전히 빨간 줄 투성이군요. 검색해보니 https://github.com/amezin/vscode-linux-kernel가 해결책이 될 수 있겠다 싶어서 시도해봅니다. 내용 Linux Kernel 소스코드를 보기 전, C/C++ Extensions을 설치했는데도 빨간 줄이 사라지지 않습니다. 막상 ctrl + 해당 변수를 누르면 define된 곳으로 잘 이동하는데 말이죠. 그래서 설치해봅니다! 설치: Visual Studio Code project for Linux kernel sources https://github.com/amezin/vscode-linux-kernel GitHu..
롤 디도스에 공격 받으면? (디도스를 체험해보자) 최근 2달 동안 스트리머 분들, 심지어는 LCK 대회까지 DDOS (Distributed Denial of Service)때문에 게임이 원활하게 되지 않는 사태가 빈번하게 발생했었습니다. 지금도 진행형으로 알고 있는데요. 방송을 시청하면서 '소환사 한 명이 게임을 종료했습니다.'라는 사운드가 들릴 때마다 이 공격이 어떻게 이뤄지는 건지, 롤 디도스 원리가 뭘지, 그리고 공격 받으면 어떻게 될 지 갑자기 궁금해져서 여러 공격 기법중에 한 가지를 직접 실험 해보았습니다. 타인에게 피해를 주지 않는 선 (봇전)에서 체험 테스트를 해보았습니다. 공격 방법은 UDP flooding을 사용했으며, 실행이 의외로 정말 단순합니다. 실제로 따라 하여 남에게 피해를 주는..
설명은 나중에... #include #include #include #include using namespace std; class Pos; int ccw(const Pos& a, const Pos& b, const Pos& c); bool straight_check(const Pos& a, const Pos& b, const Pos& c, const Pos& d); class Pos { public: int x, y; Pos(){}; Pos(int x_, int y_): x(x_), y(y_){}; bool operator
개요 2개의 DP가 엮여있는 문제입니다. 1. 부분 문자열 str[a:b]가 팰린드롬인지 판단하고 저장하는 배열을 생성하는 과정 2. 부분 문자열 str[0:c]의 팰린드롬 분할 최소 값을 파악하고 저장하는 배열을 생성하는 과정 예제 백준 예제를 예시로 들겠습니다. ABACABA 1. 부분 문자열 str[a:b]가 팰린드롬인지 판단하는 과정 해당 과정은 2차원 배열을 통해서 이뤄집니다. dp[i][j]가 갖는 값은 str[i:j]가 팰린드롬이라면 true를, 그렇지 않으면 false를 갖는 boolean 배열입니다. 1) 가장 먼저, dp[i][i]는 모두 true입니다. 1글자의 문자열은 모두 팰린드롬이라고 볼 수 있기 때문이죠. dp[0][0]의 값은 'A'가 팰린드롬인가? 를 의미하며 true입니다..
개요 실제 리눅스 네트워킹 스택을 깊게 파보고 싶다는 생각은 있었으나 실천은 못하고 있던 찰나, 적절히 참고할만한 블로그를 발견해서 한 번 진행해보려고 합니다. 가장 먼저 해보려고 하는 것은 깊이 들여다보기 전에, 테스트 환경을 갖춰보려고 해요. 그래서 직접 커널 코드를 수정해 보면서 알아갈 수 있도록 해보려고 합니다. 포스트를 계속 이어가면서, 제가 리눅스 커널 코드를 아주 간단하게 수정하고 빌드했을 때 올바르게 반영이 되는지까지 확인해보겠습니다. 내용 과정은 크게 2가지입니다. 커널 빌드, rootfs 생성. 환경 약 4년 전, 대학원 입학 전에 구매했던 갤럭시 이온 노트북이 이제는 놀고 있습니다. 여기에 Ubuntu 멀티부팅을 세팅하여 진행하였습니다. 물리 코어 4개, 논리 코어 8개 (하이퍼스레드..
개요 이분매칭 문제가 아닌 것 같은데 이분매칭 알고리즘입니다. 사실 알고리즘 종류를 모르고 시작한다면 시간이 꽤나 소요될 것 같은 유형의 문제였습니다. 상어의 크기, 속도, 지능이 주어질 때 상어 A의 세 가지 값이 상어 B의 세 가지 값보다 모두 크거나 같다면 A는 B를 먹을 수 있습니다. 여기서 잡아먹는 상어를 $V_L$에 두고 잡아먹히는 상어를 $V_R$에 두면 됩니다. 한 가지 예외는 상어 A의 모든 값이 상어 B와 동일한 경우입니다. 이 때는 단순하게 index를 기준으로 누가 누구를 잡아먹을 수 있을지 마음대로 정하면 됩니다. 왜냐하면 우리는 누가 살아남는지 관심이 있는 것이 아니라 최소로 생존할 수 있는 상어의 수에 관심이 있기 때문이죠. 마찬가지로 이런 의문이 들 수도 합니다. "상어 A ..