본문 바로가기

전체 글

(388)
3일차 영어 정리 보호되어 있는 글입니다.
I/O Control Codes [IOCTL] 정리 IOCTL 관련 번역 I/O control code는 유저모드와 드라이버간에 통신을 위해서 사용되었고 같은 스택의 드라이버간에 통신을 위해서 사용되었다. I/O control code는 IRP를 이용해서 전달되어진다.유저 모드의 어플리케이션은 DeviceControl 함수를 호출함으로써 드라이버에 IOCTL을 전달한다고 MS SDK 문서에 설명되어있다.DeviceControl 함수를 호출 하는것은 I/O Manager가 IRP_MJ_DEVICE_CONTROL을 생성을 발생시키고 최상위에 있는 드라이버에게 전달한다.추가적으로, 상대적으로 상위에 있는 드라이버는 하위에 있는 드라이버에게 IRP_MJ_DEVICE_CONTROL와 IRP_MJ_INTERNAL_DEVICE_CONTROL의 IOCTL을 전송할 수 ..
2일차 영어 정리 보호되어 있는 글입니다.
MDL(Memory Descriptor List)[1] MDL의 구조체는 다음과 같이 구성되어있다. 12345678910111213typedef struct _MDL{ PMDL Next; SHORT Size; SHORT MdlFlags; PEPROCESS Process; PVOID MappedSystemVa; PVOID StartVa; ULONG ByteCount; ULONG ByteOffset;} MDL, *PMDL; cs 그리고 이제 아래 그림을 통해서 MDL을 설명한다. [그림1]그리고 해당 구조체 다음에 바로 유저의 가상 메모리와 매핑되는 물리 메모리를 가리키는 포인터가 존재한다.MDL에 어떠한 유저 프로세스에서 접근하는지 알 수 있는 eprocess 포인터 값과 MDL 간의 관계를 표현하기 위한 리스트(PMDL)도 존재한다.그리고 해당 MDL에서 설..
백준 - [큐] 10845 보호되어 있는 글입니다.
WinDBG 명령어 [CallStack] 콜 스택(call stack) 이란 컴퓨터 과학에서 실행할 컴퓨터 프로그램 코드 정보를 저장하는 스택 자료구조 라고 설명한다. Windbg에서 많이 사용되는 명령어가 call stack 과 관련된 명령어라고한다. 개인의 실력차에 따라서, stack frame을 변경하여서 디버깅이 가능하지만, 간단하게 사용법을 정리하려 한다. 블루 스크린이 났을때 많이 사용하지만, 동일한 원리에서 시작하기 때문에 ... The k*\** commands display the stack frame of the given thread, together with related information.. 위와 같이 설명되어 있다. k command 는 주어진 스택 프레임을 관련 정보와 함께 보여준다. 즉 현재 문맥의 스레드의 스택..
IRP, I/O Stack 관련 내용 정리 [3] [코드 출처] : https://www.youtube.com/watch?v=6gIbmod6Dpo&t=3807s 코드 설명 추가 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145..
IRP, I/O Stack 관련 내용 정리 [2] I/O Stack과 IRP관련 함수 정리 IoGetCurrentIrpStackLocation() 함수 Irp의 현재 스택을 위치를 가져옴, CurrentStackLocation 값 IoGetNextIrpStackLocation() 함수 Irp의 다음 스택 주소를 가져옴 IoSetNextIrpStackLocation 함수 IoSetNextIrpStackLocation 루틴은 호출자의 드라이버에 할당 된 IRP의 IRP 스택 위치를 설정 함 IoCallDriver 함수는 내부적으로 IoSetNextIrpStackLocation 함수를 호출 함 IoSkipCurrentIrpStackLocation 함수 IRP의 이전 스택 주소를 현재 스택 주소로 지정함 IoSkipCurrentIrpStackLocation 함..