일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- doupdate
- C언어
- packet flow
- wnourefresh
- 풀이
- ncurses
- iptables
- DOCKER-USER
- epoll_wait
- cbpf
- NAPT
- Compiler
- 어셈블리어
- Docker
- LOB
- .nret core 배포
- level trigger
- .net core 7
- mvwin
- wrefresh
- ioctl
- rfc5508
- 취약점
- architecture
- packet filter
- BOF
- vtable
- REDIS
- epoll
- edge trigger
- Today
- Total
목록Computer Science (129)
Tuuna Computer Science
재귀함수를 호출하면 스택에 함수프레이임 쌓인다. 용어 풀이 from 00401527 to 004013E2 :: 00401527를 호출하고 004013E2로 반환하라 즉, 밑에서 부터 위로 읽으면 함수를 호출할 때마다 스택프레임에 쌓이고 있다는 것을 확인할 수 있다. 무리한 재귀함수 호출은 ㄴㄴ합니다. ex) 밑에서 부터 해석하면 00401500함수를 호출하고 00401521주소로 반환한다. 그리고 또 다시 00401500주소를 호출하고 00401521주소로 반환한다.
PE 파일이 프로세스 가상 메모리에 로딩될 때 PE 헤더의 ImageBase 주소에 로딩된다. DLL파일의 경우 ImageBase에 이미 다른 DLL파일이 로딩되어 있다면 다른 비어 있는 주소 공간에 로딩된다. => 재배치 PE 재배치 작업의 기본 동작 원리 프로그램에서 하드코딩된 주소 위치를 찾는다. 값을 읽은 후 ImageBase만큼 뺀다. (VA -> RVA) 실제 로딩 주소를 더한다.(RVA -> VA) Relocation Table : 하드코딩 주소들의 OFFSET(위치)을 모아놓은 목록 PE 헤더의 Base Relocation Table 항목 따라가기 =================================== IMAGE_BASE_RELOCATION 구조체 VirtualAddress :: ..
[ UPack의 PE 헤더 분석 ] 1.헤더 겹쳐쓰기 :: MZ 헤더와 PE 헤더를 교묘하게 겹쳐쓰는 것. 정상적인 프로그램의 e_lfanew = MZ 헤더 크기(40) + DOS stub 크기(가변 : VC++의 경우 A0) = E0 BUT :: UPack에서는 10이다. -> UPack은 IMAGE_OPTIONAL_HEADER 148로 변경한다. ( COFF File Header -> SizeOfOptionalHeader ) e_lfanew : -> (e_lfanew 값이가리키는 자리에 NT header이 존재해야함) NT header의 옵셋을 표시(파일에 따라 가변적인 값을 가짐) 즉, 위의 말을 정리하자면 e_lfanew값이 가리키는 (VC++의 경우 E0)자리에 NT_HEADER이 있어야한다. ..
@pointer_00401500: ;
System Call interface -> 시스템 콜 인터페이스는 user mode 프로세스인 응용 애플리케이션이 커널의 기능을 사용하게 해주는 것 커널 -> 하드웨어를 직접 제어하고 프로세스관리, 메모리관리, 파일시스템제어 등을 수행 ->사용자가 실행싴는 응용프로그램과 하드웨어 사이에서 조정자 역할을 함. 커널 버전 용어 -> 매이저 버전 : 엔진 커널의 획기적인 변화가 있을 경우 -> 마이너 버전 : 큰 변경 없이 버그 수정 및 기능적 추가 있을 경우 -> 패치 버전 : 기능은 변화없이 수정이 나타날 경우 패치버전을 씀 시스템 콜 vs 라이브러리 함수 Systme Call (커널 모드 + 하드웨어에 대한 모든 제어) -> 커널의 자원을 사용자가 사용할 수 있도록 만들어 놓은 함수 라이브러리 함수 (..
[윈도우 메모리의 구조] 프로세스의 가상주소 공간 -> 모든 프로세스는 자신만의 주소 공간을 가진다. 32bit 프로세스는 32bit의 포인터를 이용하여 0x00000000 ~ 0xFFFFFFFF까지 표현한다. 각 각의 분할 공간 : 파티션 파티션 x86 32비트 윈도우 x86 32비트 윈도우(유저모드 3G) NULL 포인터 할당 0x00000000~0x0000FFFF 0x00000000~0x0000FFFF 유저 모드 0x00010000~0x7FFEFFFF 0x00010000~0xBFFEFFFF 64KB 접근 금지 0x7FFF0000~0x7FFFFFFF 0xBFFF0000~0xBFFFFFFF 커널 모드 0x80000000~0xFFFFFFFF 0xC0000000~0xFFFFFFFF (커널코드, 디바이스 드..
@pointer_00401500: ;
@pointer1_00401500: ;
[ 공유 메모리 ] 프로세스에서 사용되는 메모리 영역은 해당 프로세스만이 사용할 수 있다. 즉, 자신만의 메모리 영역을 의미한다. -> 커널에 요청한 프로세스만이 접근할 수 있다. 하지만 여러개의 프로세스가 특정 메모리 영역을 사용했으면 하는 때가 있다. 이를 공유 메모리라고 한다. 공유 메모리는 IPC중에서 가장 빠른 수행속도를 기록한다. 이 때 한번에 하나의 프로세스만이 메모[리에 접근가능을 보장해야 한다. IPC : 프로세스간의 통신 [ 공유 메모리관련 함수 ] #include #include >sys/shm.h> int shmget (key_t key, int size, int shmflg) void* shmat (int shmid, const void* shmaddr, int shmflg) in..
[ 좀비 프로세서 ] :: 실행이 종료 되었지만 아직 삭제되지 않은 프로세스를 말한다. 보통 프로세스는 exit 시스템콜을 호출하여 프로세스를 종료 시킨다. 그리고 자신에 대한 모든 자원을 해제 시킨다. 하지만 프로세스의 exit status 상태와 PID는 여전히 남아서 유지( kernel :: task struct)에 유지하게 됨. 그 이유는 부모 프로세스는 자식 프로세스에 대한 종료상태등을 가져올 수 있어서 자신의 자식프로세가 어떤 상태로 작업을 마쳤는지에 대한 정보를 확인할 수 있기 때문이다! struct task_struct //task_struct 구조 { /* * offsets of these are hardcoded elsewhere - touch with care */ volatile l..