일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- promise처리
- promise메서드
- 토라비
- graphql with reactnative
- 잠실새내
- 화이트해커를 위한 웹 해킹의 기술
- apolloclient
- apollo react native
- 홍대 예술
- 신촌 소문난집
- 운정 소바동
- useMutation error
- graphql mutation error
- 예쁜술집 예술
- 잠실새내 도그존
- 비동기배열
- typescript
- 고르드
- 지보싶 신촌점
- graphql
- graphql 400
- 화이트 해커를 위한 웹 해킹의 기술
- 비동기배열처리방법
- 도그존
- graphql react native
- graphql with RN
- 홍대 토라비
- 홍대 카페 장쌤
- 앙버터마카롱
- 금별맥주
- Today
- Total
목록컴퓨터 시스템 (8)
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
환경변수 :시스템에서 사용하는 변수 (시스템의 설정이나 명령어의 경로 등이 저장되어있음) -환경변수는 메모리 어딘가에 항상 저장되어 있다. (*nic 계열의 쉘에서 환경변수는 포인터로 참조된다) ::BOF에서는 주로 overflow되는 버퍼의 크기가 쉘 코드가 들어갈 만큼 넉넉하지 않은 경우 사용 Linux에서 환경변수 추가하기 1. 환경변수 관련 shell 명령어: export, env env: 현재 지정되어 있는 환경변수 출력, 새로운 환경변수 설정 후 적용된 내용 출력 2. 1회성 환경변수 설정 방법 export [변수명]=값 (변수명,= , 값 사이에 공백이 없어야 한다.) shell에서 사용 int putenv(char *string); (코드 상에서 사용, 성공 시에 0 반환, 실패 시 -1 ..
BOF 공격을 하다보면 프로그램 내에 권한을 상승시켜주거나 우리가 원하는 기능을 하는 함수들이 존재하는 경우가 있고 그렇지 않은 경우가 있다. 우선 공격자가 시행하길 원하는 기능이 프로그램 내의 어떤 함수의 기능이라면 BOF를 통해 RET값에 해당 함수의 시작address를 넣어주면 된다. 그러나 공격자가 원하는 기능이 프로그램 내에 존재하지 않는다면 공격을 할 때 쉘 코드를 함께 넣어주어야 한다. 따라서 RET값에는 쉘 코드의 address가 들어가야 한다. 이 쉘코드 주소를 추측하기 위해 NOP Sled 기법을 사용한다. NOP Sled (=NOP Slide) NOP: no operation의 약자, 아무런 실행을 하지 않는다.(instruction을 구분해주기도 한다.) Linux에서 NOP: 0x..
버퍼 :시스템이 연산작업을 하는데 있어 필요한 데이터를 일시적으로 저장하는 메모리 상의 임의의 공간 (다른 말로는 큐라고도 한다.) :대부분의 프로그램에서는 버퍼를 스택에 생성한다. 스택 :함수 내에서 선언한 지역변수가 저장되고 함수가 끝나면 반환하는 저장공간 버퍼 오버플로우 (BOF, Buffer OverFlow) :미리 준비된 버퍼에 버퍼의 크기보다 큰 데이터를 쓸 때 발생한다. ('덮어쓰기'라고 생각하면 더 쉽다!) :정상적인 경우에는 접근할 수 없는 메모리 공간에 접근해서 임의로 값을 바꾸는 것 40바이트의 스택이 준비되어있다고 가정하자. -40바이트 이하의 데이터를 버퍼에 쓰는 것은 아무런 지장이 없다. -만약 41~44바이트의 데이터를 쓴다면 준비된 버퍼(40바이트)를 다 소진한 후 남은 4바..
gdb 명령어 모음 시작과 종료 gdb (프로그램명): 시작 q(quit) / ctrl+d: 종료 file 프로그램명: 디버깅할 프로그램으로서 파일을 사용한다. disas 함수명: 특정 함수의 어셈블리 코드 출력 disas [주소] [주소]: 주소 사이의 어셈블리 코드 출력 jump *[주소]: 주소로 강제적 분기 (주소 외에 행번호, 함수명도 가능) set{타입}[주소]=값 : 특정 메모리에 값을 지정한다. 소스 보기 list: 현재 위치에서 소스파일의 내용을 10줄 보여준다. list num1, num2: 소스 파일의 num1~num2까지를 보여준다 브레이크 포인트 break: 특정 라인이나 함수에 정지점을 설정한다. (b를 입력해도 break 실행) break(b) 함수명: 함수명에 해당하는 함수의..
gcc 컴파일 :실행가능한 파일을 만든다. :gcc -o 실행파일명 소스파일명(*.c) :gcc 소스파일명(*.c) -o 실행파일 명 컴파일 과정 소스파일 컴파일-> 오브젝트 파일(*.o) 생성-> 실행파일 생성-> 오브젝트 파일 삭제 gcc 옵션 -S: cc1으로 전처리된 파일을 어셈블리 파일로 컴파일까지만 수행하고 멈춘다. (*.s) -c: as에 의한 어셈블까지만 수행, 링크를 수정하지 않는다. -v: gcc 가 컴파일을 어떤 식으로 수행하는지를 화면에 출력한다. --save-temps: 컴파일 과정에서 생성되는 전처리 파일(*.i)과 어셈블리 파일(*.s)를 지우지 않는다. -W: 합법적이지만 모호한 코딩에 대해 경고를 보낸다. -Wall: 모든 모호한 코딩에 대해서 경고를 보낸다. gdb: GN..
어셈블리어 명령어 종류와 기능 mov: 데이터 이동 시에 사용 lea: 주소 값을 옮길 때 사용 add: 레지스터나 메모리의 값을 덧셈할 때 sub: 레지스터나 메모리의 값을 뺄 때 dec: 값을 1 감소 시킨다. inc: 값을 1 증가 시킨다. cmp: 레지스터와 레지스터 값을 비교 jmp 특정한 곳으로 분기 call: 프로시저를 호출 ret: 호출했던 바로 다음 지점으로 이동 (call한 주소로 이동) push: 값을 스택에 저장 pop: 값을 스택에서 삭제 nop: 아무것도 하지 않는다. 어셈블리어 명령어 분류 데이터 이동: mov, lea 논리 연산: add, sub, dec, inc 흐름제어: cmp, jmp 프로시저: call, ret 스택 조작: push, pop 범용 레지스터 : 논리연산,..
8086 Memory Architecture 시스템이 초기화되면 시스템은 커널을 메모리에 적재, 가용 메모리 영역(available space)를 확인한다. 시스템은 운영에 필요한 기본적인 명령어 집합을 커널에서 찾기 때문에 커널은 반드시 저 위치에 존재해야한다. 32bit 시스템 :CPU가 한꺼번에 처리할 수 있는 데이터가 32bit단위로 되어 있기 때문에 메모리 영역에 주소를 할당할 수 있는 범위가 0~(2^32)-1 이다. 64bit 시스템 :CPU가 64bit씩 처리할 수 있으므로 메모리 영역의 범위 는 0~(2^64)-1 이 된다. 위와 같이 운영체제는 하나의 프로세스를 실행시키면 프로세스를 segment라는 단위로 묶어서 가용 메모리 영역에 저장시킨다. 오늘날 시스템은 멀티 태스킹(multi-..
컴퓨터 시스템의 구성 소프트웨어 = 시스템 소프트웨어 + 응용소프트웨어(application) 좁은 의미의 시스템 소프트웨어 = 운영체제 넓은 의미의 시스템 소프트웨어 = 운영체제 + 언어처리기(컴파일러, 어셈블러) 등 컴퓨터 시스템 = 하드웨어 + 시스템 소프트웨어 ISA = 하드웨어와 시스템 소프트웨어의 인터페이스(규약) 응용소프트웨어 (Application) : Machine Independent (소프트웨어를 실행하는 컴퓨터 시스템의 유형에 따라 달라지지 않는다.) : ISA를 알지 않아도 된다. Instruction과 ISA Instruction (기계어) : 컴퓨터가 이해가능한 유일한 언어 : 0과 1로 이루어져있다. : ISA에 따라 다르게 정의된다. ISA (Instruction Set A..