일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- level trigger
- vtable
- rfc5508
- REDIS
- 취약점
- wrefresh
- ncurses
- edge trigger
- packet filter
- .net core 7
- .nret core 배포
- epoll_wait
- 어셈블리어
- wnourefresh
- ioctl
- cbpf
- mvwin
- iptables
- LOB
- architecture
- 풀이
- Docker
- packet flow
- Compiler
- BOF
- C언어
- doupdate
- epoll
- NAPT
- DOCKER-USER
- Today
- Total
목록Computer Science (129)
Tuuna Computer Science
IDT와 GDT가 헷갈렸던 참에 정리가 잘 돼서 여기에 마지막으로 정리를 하려한다. 일단 인터럽트의 종류에는 소프트웨어 인터럽트랑, 하드웨어 인터럽트가 존재한다. 소프트웨어 인터럽트는 말 그대로 소프트웨어단에서 CPU에게 인터럽트를 요청하는 거고 하드웨어 인터럽트는 CPU외의 주변 기기 장치로 부터 받는 인터럽트를 의미한다. 오늘은 소프트웨어보단 하드웨어 인터럽트에대해 정리할것이다. 일단 우리의 PC에는 8259A라는 인터럽트를 받는 PIC칩이 존재한다. 이 PIC는 2개로 이루어져 있다. 마스터 PIC + 슬레이브 PIC로 이루어져 있다. 도 이 각 각의 PIC에는 8개의 IRQ와 한 개의 INT핀 한 개의 /INTA핀이 존재한다. (각 각의 IRQ핀은 번호가 매겨지는데 0번 째 부터 시작한다.) 마스..
OS 제작과정 중에 Real Mode에서 Protected Mode로 변환할 때 가장 중요한 것은 32비트 Kernel을 개발하는 것이다. 즉, 이는 CPU가 Protected Mode로 동작하도록 해야하는 것이다. 이 Real Mode와 Protected Mode로 변환하기 전엔 GDT(Global Descriptor Table)이라는 것이 필요로 한다. GDT는 각 세그먼트 영역에 대해 이것들을 어떻게 사용할 것인지에 대해 서술한 것을 의미한다. (여담이지만 최신 윈도우와 리눅스는 LDT라고 Local Descriptor Table을 사용하는데 나중에 한 번 공부해봐야겠다.) ---------------------------------------------Base Address : 세그먼트의 시작 주..
드디어! 시저암호 암호화 복호화를 어셈블리어로 구현하는데 성공했다! 디버깅하면서 동적분석하는데 꽤나 시간을 많이 잡아먹었는데 이유는 단순했다. 내가 못 찾았을 뿐.... ㅎ 좋은 경험 ~.~ 어셈블리어로 코드짜면서 뭔가 C 언어 보다 직관적이면서 단순한게 매력인거 같다 ㅋㅋ ;일단 필요한 함수 strlen, strcpy구현 %include "asm_io.inc" segment .bss segment .data format1 db "%s", 0 format2 db "%d", 0 print1 db "input your key(0~25) : ", 0 print_en db "~~~~~~~~~Encrypto!~~~~~~~~", 0 print_cr db "~~~~~~~~~Crypto~~~~~~~~~", 0 prin..
C로 시저암호(카이사르암호) 암호화와 복호화를 먼저 작성하고 이를 바탕으로 어셈블리어로 작성하려 한다. 먼저 복호화 구간은 조금 복잡해서 먼저 암호화 구간만 진행했는데 아마 내일 부터 다시 복호화 구간을 만들어내지 않을까 생각해본다... ㅎ 코드는 주석을 대충달았는데 알아서 잘 해석하길 바랍니다. 또한 %include "asm_io.inc"는 Pual Carter 교수가 만든 include파일인데 print_nl을 사용하기 위해서다 이 파일이 없다면 지우고 print_nl을 지우길 바람. ;일단 필요한 함수 strlen, strcpy구현 %include "asm_io.inc" segment .bss segment .data format1 db "%s", 0 format2 db "%d", 0 print1 ..
어세블리어로 시저암호를 만들기위해 먼저 C로 소스코드를 작성함. 아래는 카이사르 암호 복호화, 암호화 과정인데 번호 2번은 작동하지 않는다. 대신 1번을 누르고 암호화 진행 후, 복호화도 같이 진행된다. #include #include /* 카이사르 암호 만들기 암호화 & 복호화 만들기 키는 0~25 총 26개 암호화 과정 'P' - 'A' 해서 나온값에 key를 더하고 %26을 한다. 복호화과정에선 'P' - 'A' 해서 나온값에 key를 빼고 %26을 한다 만약 -가 나올경우 26을 더한다. */ void Crypto(char* plain, int key); void Encrypto(char* crypto_text); int main(void) { int i; int len; int check; ch..
x86 프로세서를 위한 어셈블리어 6판에서 문제인 배열의 역순 풀이 풀면서 여러방법이 있겠지만 2가지 방법이 떠오름 첫 번째로 임시 레지스터를 이용해서 배열의 값을 교체하는거 두 번째로 스택공간의 push와 pop을 이용해 교체하는 것 첫 번째 하다가 segment fault떠서 두 번째 방법으로 갈아탔는데 똑같이 segment fault떴음. 알고 보니깐 두 개다 마지막에 mov esp, ebp를 갈겨서 스택이 증발해벼렸던거... ;( 암튼 풀이는 스택에 1,2,3,4,5 ... 순서대로 push하면 마지막엔 10이 있음. 이 10을 기준으로 다시 pop하면 됨. 아 그리고 C 라이브러리함수인 printf를 호출하면 eax와 ebx, ecx의 값이 바뀌는데 eax의 값이 바뀌는건 알았는데 ecx 레지스..
[ 하루 일 어셈블리 코딩 ] nasm intel 32bit assembly descriptor : factorial을 구현해보자 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 %isdnclude "asm_io.inc" segment .bss number resd 1 segment .data outmsg1 db "input your number : ", 0 format1 db "%s", 0 format2 db "%d", 0 segment .text extern printf extern scanf global main global f..
[ 하루 어셈블리 일코딩 ] 적어도 1주일에 3~4개는 어셈블리로 코딩할 것이다. 나중에 악성코드 분석할 때 도움되리라 믿고 또 코드를 짤 땐 간단한거 말고 심화적인걸루 해봐야 겠다. 일단 오늘은 피보나찌수열을 어셈블리어로 코딩하기~.~ nasm : 32bit intel assembly 아 조금 신기한게 C로 짠거보다 조금 빠른속도를 보였다. ㅎ.ㅎ 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 %include "asm_io.inc" segment .bs..
메모리란 프로그램이 실행되는 동안 필요한 정보를 저장하는 곳을 의미한다. CPU는 이러한 메모리에 접근하기 위해서는 훨씬 느린 속도로 수행되는 System Bus를 통해 이루어진다. CPU의 처리는 빠른데 메모리로의 접근은 느리기 때문에 CPU는 피연산자가 메모리에서 인출될 때 까지 하나 이상의 사이클을 기다려야 하는 현재의 명령어를 실행 가능하다. 이를 낭비 클럭 사이클이라 하며 "대기상태"라 불린다. 그래서 이를 해결하기 위해 캐시 메모리라는 것이 탄생했다. 캐시메모리는 최근 사용된 명령어와 데이터를 저장하기 위해 만들어져 빠르게 접근이 가능하다. 이제 프로그램이 어떻게 메모리에 올라와서 프로세스가 되는지에 대한 과정을 살펴보자 내가 A라는 프로그램을 실행한다고 과정해보자 1. OS는 A라는 파일 이..
CPU의 주 목적은 무언가를 처리하는 것이다. CPU는 컴퓨터 주기판에 있는 CPU소켓에 부착된 핀을 통하여 컴퓨터의 나머지 부분과 연결된다. 컴퓨터가 무언가를 실행하려면 실행하려는 프로세스가 메모리에 올라와야하며 이 메모리에 있는 프로세스가 CPU로 복사되어야 실행된다. 즉, CPU에게 데이터를 주기 위해 존재하는게 버스다. (Memory CPU) 버스 : 데이터를 컴퓨터의 한 부분에서 다른 부분으로 전송하는 병렬 와이어 그룹을 의미한다. 즉, 메모리에서 CPU로 데이터를 보낼 때 버스를 사용한다. 이러한 버스들도 각 각의 명칭이 있는데 먼저 메모리와 CPU를 잇는 버스는 System_Bus가 있다. System_Bus를 좀 더 세부적으로 보면 Control_Bus, Address_Bus, Data_B..