사실 디렉토리 안에 파일들 이름들 저장되어있으니까(UNIX 파일시스템 기준), 실제로 디렉토리 안의 contents을 읽어보고 싶어졌다. (ls 말고...) 그런데 cat이나 xxd등의 일반 읽기 명령어로 읽으려고 하면 계속 ~~is directory가 뜨고 안됐다ㅜㅜ(참고로 vi로는 읽을 수 있었는데 얘가 디스크에 있는 ㄹㅇ 찐 컨텐츠 자체를 읽는건 아닌듯 근데 암튼 이것도 신기하긴 했음) 그래서 찾아봤더니, inode에 파일의 형식이 저장되어있다고 한다. 일반 파일: S_IFREG (0100000)디렉토리: S_IFDIR (0040000)심볼릭 링크: S_IFLNK (0120000)문자 장치 파일: S_IFCHR (0020000)블록 장치 파일: S_IFBLK (0060000)파이프(명명된 FIFO)..
wsl 당연히 알겠지만, wsl을 이렇게 쓸 수 있는지는 나도 방금 처음 알았다.지금까지 wsl를 쓰면 그냥 우리의 호스트 컴퓨터랑 와안전히 분리된 가상의 환경이라고 생각했는데 그게 아니었다.. 참고로 위는 /dev/sdc가 /와 /mnt/wslg/distro에 마운트되어있다는 이야기임ㅇㅇ 파일시스템 공부하다가 내 파일시스템이 뭔지 궁금해서 mount | grep ^/dev 를 써서 마운트된 fs들을 다 찍어보았다근데 저러면 위처럼 /dev로 시작하는 애들만 나와서 그냥 grep 주지말고 그냥 mount만 진행했는데 엄청 길게 막 나오고 맨 아래에 밑 화면이 찍혔다... 그런데 보니까 윈도우에서 우리가 사용하는 C,D drive였음ㅇㅇ.. 그래서 궁금해서 /mnt/c로 가봤다... 근데 ㄹㅇ 이 디..
간단한 LLVM 실습을 해보겠다. 1. 일단 간단한 C 파일을 작성한다.#include int main() { printf("hello world\n"); return 0;} 2. clang으로 hello.c를 컴파일한다. clang hello.c -o hello 3. clang으로 LLVM bitcode 파일을 하나 생성한다.clang -O3 -emit-llvm hello.c -c -o hello.bc여기서-emit-llvm 옵션은 -S와 -c 옵션을 통해 각각 .ll, .bc 파일을 생성한다 참고로 -c 옵션을 주었을 때는 아래처럼 아예 인간이 알아볼 수 없는 형태가 되지만, -S 옵션을 주면 아래처럼 clang은 인간이 읽을 수 어셈블리를 반환한다. 따라서 엄밀히 말해서는 비트코드가 ..
계속 user_user 테이블이 없다고 난리치던데, 보니까 DB가 충돌나서 그런 거였다.이런 경우 각 앱의 migration 안의 0001_initial.py 이런 것들 다 지우고(단 __init__.py는 지우면 안됨!) 다시 마이그레이션 해줘야한다그리고 만약 __init__.py가 없으면 얘도 그냥 생성해줘야한다(차피 빈 파일이라 그냥 이름만 저런 빈 파일 만들면 됨ㅇㅇ) 암튼 이러고 하면 잘 된다.............
요즘 갑자기 읽어야하는 논문들이 SFI 관련이어서, 베이스 지식을 좀 다지려고 따로 정리한다. (3일만에 논문 4개는 너무해요) https://www.cse.psu.edu/~gxt29/papers/sfi-final.pdf Introduction컴퓨터 시스템을 보호하기 위해서는 여러개의 'protection domain'을 가져야한다.예를 들어 Kernel mode에서는 low한 작업을 한 권한이 있지만 user mode에는 해당 권한이 없는 것처럼!시스템의 신뢰되지 않은 요소들을(untrusted components) 혹은 신뢰가 필요한 요소들을 따로 고립하는 건 매우매우 자연스럽다.시스템의 untrusted components를 별도의 protection domain에서 관리하여 최소한의 권한을 부..
Interpocedural Analysis f(x)를 저렇게 선언하는 대신, main에서 y=x*42를 한다음 f(x) 대신에 y를 넣으면 더 낫지 않을까? Open vs Closed world-> 이 둘을 구분하는 것은 볼 수 있는 코드의 영역 차이이다.- open world assumption: 다른 숨겨진 코드들이 있다고 가정- closed world assumption:모든 코드를 볼 수 있음 위 그림에서 closed world assumption 상황이라면 h를 지워도 된다. 왜냐하면 아무도 h를 calling하지 않으니까! 하지만 open world의 경우 i처럼 다른 함수가 h를 부르고 있을 수도 있으므로 h를 지우면 안 된다. Why open world assumption?- m..