vim
set autochdir
set autoindent
set smartindent
grep
search string in a file or files
command option searchstring path
grep -Iinr '^obref' .
find
search file list in directory
command path option regular expression
find . -name '*.[ch]'
find + grep
find . -name '*.[ch]' | xargs grep -in '^obref'
Windows Findstr
command searchstring path(windows style) - '.' not work opposite to linux shell
findstr printf *.c
2013년 12월 22일 일요일
2013년 12월 16일 월요일
windows driver build - sources
Sources 파일에 대하여 몇가지 중요한 부분만 정리해 본다.
Sources
- TARGETNAME
빌드될 바이너리 이름
- TARGETTYPE
DRIVER, EXPORT_DRIVER, DRIVER_LIBRARY, PROGRAM, DYNLINK
- TARGETPATH
빌드된 바이너리 위치
- SOURCES
소스 파일 ( 여러줄로 표현할 경우 '\' 를 사용 )
- INCLUDES
header 파일 참조 경로
- C_DEFINES
- USER_CFLAGS
- TARGETLIBS
라이브러리 참조 경로 ( 참고로 전체 경로로 써 주어야 함)
ex>
***************************************************************
TARGETTYPE=DRIVER_LIBRARY
TARGETNAME=klib
TARGETPATH=..\bin
C_DEFINES = $(C_DEFINES)
INCLUDES=$(DDK_INC_PATH);..\inc
SOURCES= klib.
***************************************************************
TARGETTYPE=DRIVER
TARGETNAME=kdrv
TARGETPATH=..\bin
C_DEFINES = $(C_DEFINES)
INCLUDES=$(DDK_INC_PATH);..\inc
TARGETLIBS = ..\bin\*\klib.lib
SOURCES= kdrv.
더 자세히 읽고 싶다면 아래 주소 참고
http://www.wd-3.com/archive/WinBuild.htm
2013년 12월 12일 목요일
KeEnterCriticalRegion
커널에서 APC 를 디스패치할 수 없도록 하기 위해서는 단순히 IRQL 을 APC_LEVEL로 올리면 가능하다. 하지만 윈도우에서는 스레드 커널 구조체에 값을 지정하여 특정 구간에서는 APC 를 불가능하도록 만드는 방법을 사용하고 있다.
다음 두 개의 함수를 사용해서 구간을 진입하게 된다.
KeEnterCriticalRegion
{
Thread->KernelApcDisable -= 1
}
KeLeaveCriticalRegion
{
Thread->KernelApcDisable += 1
}
KeEnterCriticalRegion, KeLeaveCriticalRegion
윈도우 커널에서는 스레드 커널 구조체의 ( KTHREAD ) 의 특정 필드를 통해서 위 매커니즘을 구현하게 된다.
KTHREAD.KernelApcDisable
이 값은 3가지 방향을 갖는다. 0, minus, plus
위와 같이 두개의 함수가 KernelApcDisable 값을 1씩 증감하면서 변화 시킨다.
+ 2 APC Dispatch Disable ( KeEnterCriticalRegion 이 연속으로 호출됨 )
+ 1
0 APC Dispatch Enable, If APC Dispatch Entry exist
- 1
- 2 APC Dispatch Disable ( KeLeaveCriticalRegion 이 연속으로 호출 됨 ) 발생해서는 안되는 상황
KernelApcDisable 값이 '0' 이 될 때만 APC Dispatch 가 가능하다는 점을 기억하자.
만약 이 값을 boolean 으로 만들었다면 KeEnterCriticalRegion 와 KeLeaveCriticalRegion 함수 호출에 대한 pair를 추적하기 힘들었을 것이다.
signed value 로 지정함으로써 두개의 함수가 몇번 호출했는지 추적도 가능하고 APC Dispatch 가 가능한 구간도 지정할 수 있다.
피드 구독하기:
덧글 (Atom)