OS
Shell Script
Shell Script
2021.03.15linuxsig.org/files/bash_scripting.html Table 1: Built-in shell variables. Variable Use $# Stores the number of command-line arguments that were passed to the shell program. $? Stores the exit value of the last command that was executed. $0 Stores the first word of the entered command (the name of the shell program). $* Stores all the arguments that were entered on the command line ($1 $2 ...). "..
shell prompt (bash, Oh My Zsh)
shell prompt (bash, Oh My Zsh)
2020.01.10bash Ctrl+Backspace로 단어 삭제하도록 만들기 ```c +++ /etc/inputrc 또는 ~/.inputrc "\C-h": backward-kill-word ``` 이렇게 설정했는데 backspace만 눌러도 한 단어가 지워지는 경우? 더보기 backspace를 누르면 ``c ^?``(0x7f)를 보내도록 되어 있고, Ctrl+backspace를 누르면 ``c ^H``(0x08)을 보내도록 되어 있는게 일반적임 Ubuntu bash 터미널, mac의 iterm2는 이와 같은 식으로 키코드가 발생함 그러나 xshell같은 SSH Client에서는 기본 backspace 키 시퀀스가 ``c ^H``로 설정돼 있어 이런 경우 그냥 backspace만 눌러도 1단어가 지워진다. 기본 키 시퀀스를..
바이너리를 쉘 명령어로 등록하기 (+ 버전 관리, 멀티 패키지)
바이너리를 쉘 명령어로 등록하기 (+ 버전 관리, 멀티 패키지)
2019.05.14PATH shell에 명령어를 입력하게 되면 환경 변수 `` PATH``에 등록된 경로를 차례로 뒤져가면서 해당 명령어와 일치하는 바이너리가 있는지 찾는다. `` /usr/bin``에 위치한 바이너리가 쉘에서 별도의 prefix 없이 명령어로서 사용할 수 있는 것은, 이 경로는 기본으로 `` PATH``에 등록되어 있기 때문 패키지를 수동 설치 하거나 바이너리를 직접 가져온 경우, 이를 명령어로 등록하고 싶다면? 해당 바이너리가 위치한 경로를 환경변수 `` PATH``에 추가하는 방법 PATH 관리가 좀 지저분해질 수 있다. 해당 바이너리만 `` /usr/bin``으로 직접 symbolic link하는 방법 가능은 하지만 단점이 있음. 버전이 여러 개인 경우. 예를 들면 java8, java12나 pyt..
Deadlock 데드락
Deadlock 데드락
2018.10.04데드락은 프로세스2개 자원2개만 기억하면 된다. 데드락에는 프로세스2개 자원2개가 필요하니 데드락 케이스를 만들어 낼 때, 프로세스2개 자원2개만 기억하면 만들어 낼 수 있다. 교착 상태 조건 4가지 다음 4가지 조건을 모두 만족하면 데드락이 발생한다. Mutual Exclusion : 상호 배제. 프로세스가 타겟 자원을 요구 시 타 프로세스를 배제하고 배타적으로 요구한다. (자원을 혼자 쓰겠다.) Hold & Wait : 자원 하나 홀드 한 상태에서, 다른 자원이 반환되기를 기다린다. No Preemption : 비선점. 다른 프로세스가 가지고 있는 자원을 선점할 수 없다.[=뺏어올 수 없다] (반대 케이스는 내가 우선순위가 높으면 선점 가능한 경우.) Circular Wait : 대기가 환형으로 발생..
Windbg
Windbg
2018.07.26```c1: kd> x HelloDriver!gTraceFlagsfffff801`908a3020 HelloDriver!gTraceFlags = 01: kd> ed HelloDriver!gTraceFlags 0xffffffff1: kd> x HelloDriver!gTraceFlagsfffff801`908a3020 HelloDriver!gTraceFlags = 0xffffffff````` ed`` : e는 edit, d는 DWORD. `` eq``같은 것도 가능하다. Windbg에 OutputDebugString로 출력되는 디버그 스트링 찍기커널의 ``c Kd_DEFAULT_Mask``와 ``c &``연산을 하기 때문에, 기본적으로 아무것도 출력되지 않도록 되어있다.따라서 이 값을 ``c 0xffffffff..
파이프라이닝과 해저드
파이프라이닝과 해저드
2018.06.20Pipeline한 cycle 당 instruction 하나를 모조리 실행하는 단일 사이클 방식은 이미 지나간 데이터 패스 자원이 명령어가 끝나고 다음 명령어가 들어올 때 까지 놀고 있기 때문에, 이런 자원을 계속 돌리기 위해 명령어를 멀티 사이클로 나누고 병렬로 실행하는 방식. 하나의 instruction을 ``c IF - ID - EX - MEM - WB`` 5 stage로 나누고, 한 cycle 당 한 stage 씩 실행하는데 각 stage를 병렬적으로 실행하는 방식이다.하나의 명령어를 실행하는데 5 cycle이 필요한 것 처럼 보이나, 명령어 100개를 파이프라인에 넣고 돌린다고 생각해보면 처음 파이프라인에 명령어를 투입할 때(fill)와 파이프라인에서 마지막 명령어가 빠질 때(drain)를 제외하..
Meltdown 정리
Meltdown 정리
2018.05.26Meltdown핵심은 2가지다.L1 Cache Hit 시 시간과 아닐 때의 시간 비교파이프라이닝 정리하면 다음과 같은 과정으로 익스플로잇.L1 Cache 크기 만큼의 dummy 배열로 L1 Cache 초기화배열 잡고 원하는 데이터(Kernel space data)를 index로 배열에 접근하여 해당 index번째를 L1 Cache에 적재. 즉 index=target data.user mode에서 kernel space 접근하면 보호비트 보고 fault를 일으키지만, 파이프라이닝 때문에 fault가 발생하기 전에 이미 L1 Cache에 타겟 데이터가 적재된 상태. fault는 commit 단계에서 발생하기 때문에 이전 명령어가 이미 execute 단계를 지난 상태. 배열에서 데이터 하나씩 조회해보다가, 다..
MIPS celsius to fahrenheit
MIPS celsius to fahrenheit
2018.05.02```py# Celsius to fahrenheit .datamsg:.asciiz "Enter celsius : "const9:.float 9.0const5: .float 5.0const32: .float 32.0zeroF: .float 0.0 .text.globl mainmain: # Expand stack and save $raaddi $sp, $sp, -4sw $ra, ($sp)li $v0, 4# print_str syscall numberla $a0, msg# arg0 : msgsyscallli $v0, 6# read_float syscall numbersyscall# $f0 - user input float numberjal c2fli $v0, 2# print_float syscall numbe..
[Windows] 작업 스케줄러 / 시작프로그램
[Windows] 작업 스케줄러 / 시작프로그램
2017.11.25전역 시작 프로그램 경로```C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup``` 작업 스케줄러`` SYSTEM`` 권한으로 실행하도록 하거나, 어떤 조건을 만족했을 때 프로세스가 실행되거나 종료되도록 설정할 수 있는 유용한 기능.
SSH 접속 끊어도 프로세스 돌아가도록 하기 : screen, disown, 백그라운드 작업
SSH 접속 끊어도 프로세스 돌아가도록 하기 : screen, disown, 백그라운드 작업
2017.11.13```bash screen -S [sessionname] // session 생성 및 진입 ``` 새로운 session에서 프로세스 실행하면 SSH 끊어도 생성한 session과 프로세스가 계속 실행된다. ```bash Ctrl-a, d || screen -d // session 실행은 유지하면서 원래 shell로 나가기 ``` ----------- SSH 접속 종료 ----------- . . . . . . . . . . . . . . . . . . . . . . . . . ----------- 다시 SSH 접속 ----------- ```bash screen -ls // session list 출력 screen -r [[pid.]tty[.host]] // 다시 session으로 되돌아가서 작업 결과 ..
CVE-2017-1000112 : Exploitable memory corruption due to UFO to non-UFO path switch
CVE-2017-1000112 : Exploitable memory corruption due to UFO to non-UFO path switch
2017.11.08CVE-2017-1000112https://github.com/xairy/kernel-exploits/blob/master/CVE-2017-1000112/poc.c```cvoid oob_execute(unsigned long payload) {char buffer[4096];memset(&buffer[0], 0x42, 4096);init_skb_buffer(&buffer[SHINFO_OFFSET], payload); int s = socket(PF_INET, SOCK_DGRAM, 0);connect(s, (void*)&addr, sizeof(addr))/* #1 */int size = SHINFO_OFFSET + sizeof(struct skb_shared_info);int rv = send(s, buf..
[kernel] current 구조체 / cred 수정
[kernel] current 구조체 / cred 수정
2017.10.22struct task_struct current/v4.13.8/source/include/linux/sched.h#L519```c struct task_struct {#ifdef CONFIG_THREAD_INFO_IN_TASK /* * For reasons of header soup (see current_thread_info()), this * must be the first element of task_struct. */ struct thread_infothread_info;#endif /* -1 unrunnable, 0 runnable, >0 stopped: */ volatile longstate; ..........................................................