- Today
- Total
목록프로그래밍 (Programming) (71)
Byeo
이전 포스트: https://byeo.tistory.com/entry/socket-system-call-3 socket system call 3 (tcp_v4_init_sock)이전 포스트: https://byeo.tistory.com/entry/socket-system-call-2 socket system call 2 이전 포스트: https://byeo.tistory.com/entry/socket-system-call socket system call 1 int socket(int domain, int type, int protocol); socket 시스템 콜의 동byeo.tistory.com 7. sock_map_fd마지막으로 sock_map_fd 함수를 거칩니다. 이 함수는 기존에 tcp_ip..
이전 포스트: https://byeo.tistory.com/entry/socket-system-call-2 socket system call 2이전 포스트: https://byeo.tistory.com/entry/socket-system-call socket system call 1 int socket(int domain, int type, int protocol); socket 시스템 콜의 동작을 한 번 들여다 봅니다! https://man7.org/linux/man-pages/man2/socket.2.html linubyeo.tistory.com inet_create까지의 발걸음 6. tcp_v4_init_sock// net/ipv4/tcp_ipv4.c/tcp_v4_init_sock() :2236st..
이전 포스트: 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..
지난 포스트에서 추가한 리눅스 시스템콜을 사용하기 위해서는 위에서 기술된 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..
개요 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가지입니다. 커널 빌드, rootfs 생성. 환경 약 4년 전, 대학원 입학 전에 구매했던 갤럭시 이온 노트북이 이제는 놀고 있습니다. 여기에 Ubuntu 멀티부팅을 세팅하여 진행하였습니다. 물리 코어 4개, 논리 코어 8개 (하이퍼스레드..
Most Linux developers use a top command to monitor the server status. Although this tool provides CPU and memory usage in the unit of each process as well as in the unit of the entire system, it is painful to figure out the I/O-related information. In Windows, we can easily find this kind of data with ctrl+alt+delete. Thus, this post is concerned with reviewing several Linux network traffic moni..