logo
logo
x
바코드검색
BOOKPRICE.co.kr
책, 도서 가격비교 사이트
바코드검색

인기 검색어

실시간 검색어

검색가능 서점

도서목록 제공

CERT C 프로그래밍 2/e

CERT C 프로그래밍 2/e

(버그 없는 안전한 소프트웨어)

로버트 C. 시코드 (지은이), 노영찬 (옮긴이)
에이콘출판
43,000원

일반도서

검색중
서점 할인가 할인률 배송비 혜택/추가 실질최저가 구매하기
38,700원 -10% 0원
2,150원
36,550원 >
38,700원 -10% 0원
카드할인 10%
3,870원
34,830원 >
yes24 로딩중
교보문고 로딩중
11st 로딩중
영풍문고 로딩중
쿠팡 로딩중
쿠팡로켓 로딩중
G마켓 로딩중
notice_icon 검색 결과 내에 다른 책이 포함되어 있을 수 있습니다.

중고도서

검색중
서점 유형 등록개수 최저가 구매하기
로딩중

eBook

검색중
서점 정가 할인가 마일리지 실질최저가 구매하기
로딩중

책 이미지

CERT C 프로그래밍 2/e
eBook 미리보기

책 정보

· 제목 : CERT C 프로그래밍 2/e (버그 없는 안전한 소프트웨어)
· 분류 : 국내도서 > 컴퓨터/모바일 > 프로그래밍 언어 > C
· ISBN : 9791161756769
· 쪽수 : 612쪽
· 출판일 : 2022-08-31

책 소개

코딩 과정에서 오류 및 취약성을 유발하는 불안전한 프로그램 코드를 제거해 안전성, 신뢰성, 보안성을 갖춘 C 프로그램을 개발할 수 있는 효과적인 방법을 제공한다. 관련 규칙은 제목과 설명, 부적절한 코드 예제, 규칙에 부합하는 해결 방법을 코드 예제로 설명한다.

목차

1장. 전처리기
__PRE30-C. 유니버설 문자 이름을 여러 문자열에 붙여서 만들지 마라
__PRE31-C. 불안전한 매크로에 매개 변수로 인한 부수 효과를 피하라
__PRE32-C. 함수형 매크로 호출에 전처리 지시자를 사용하지 마라


2장. 선언과 초기화
__DCL30-C. 객체를 선언할 때 적절한 지속 공간을 지정하라
__DCL31-C. 식별자를 사용하기 전에 먼저 선언하라
__DCL36-C. 연결(링크) 분류에서 충돌하는 식별자를 선언하지 마라
__DCL37-C. 예약어를 식별자로 선언하거나 정의하지 마라
__DCL38-C. 유연한 배열의 멤버를 선언할 때 정확한 문법을 사용하라
__DCL39-C. 구조체 패딩에서 정보의 누출을 피하라
__DCL40-C. 동일한 함수나 객체에 호환되지 않는 선언을 생성하지 마라
__DCL41-C. switch구문에 첫 번째 case 절 앞에 변수를 선언하지 마라


3장. 표현식
__EXP30-C. 부수 효과로 인한 평가 순서에 의존하지 마라
__EXP32-C. volatile이 아닌 참조자로 volatile 객체에 접근하지 마라
__EXP33-C. 초기화되지 않은 메모리를 읽지 마라
__EXP34-C. 널 포인터를 역참조하지 마라
__EXP35-C. 임시 존속 기간을 가진 객체를 수정하지 마라
__EXP36-C. 포인터를 더 엄격하게 할당된 포인터 타입으로 변환하지 마라
__EXP37-C. 인자의 정확한 개수와 타입으로 함수를 호출하라
__EXP39-C. 호환되지 않는 타입의 포인터 변수에 접근하지 마라
__EXP40-C. 상수 객체를 수정하지 마라
__EXP42-C. 패딩 데이터를 비교하지 마라
__EXP43-C. restrict로 한정된 포인터를 사용할 때 정의되지 않은 동작을 피하라
__EXP44-C. sizeof, _Alignof, _Generic에서 피연산자의 부수 효과에 의존하지 마라
__EXP45-C. 선택문에서 할당을 하지 마라


4장. 정수
__INT30-C. unsigned 정수 연산이 래핑되지 않도록 주의하라
__INT31-C. 정수 변환으로 데이터가 손실되거나 잘못 처리되지 않도록 주의하라
__INT32-C. signed 정수의 연산이 오버플로되지 않도록 보장하라
__INT33-C. 나눗셈이나 나머지 연산에서 0으로 나누는 에러가 발생하지 않게 하라
__INT34-C. 음수나 피연산자의 비트보다 더 많은 비트를 시프트하지 마라
__INT35-C. 정확한 정수 정밀도를 사용하라
__INT36-C. 포인터를 정수로 또는 정수를 포인터로 변환할 때 주의하라


5장. 부동소수점
__FLP30-C. 부동소수점 변수를 반복문의 카운터로 사용하지 마라
__FLP32-C. 수학 함수에서 도메인 에러나 영역 에러를 찾고 예방하라
__FLP34-C. 부동소수점 변환이 새로운 타입의 범위 안에 들어가는지 확인하라
__FLP36-C. 정숫값을 부동소수점으로 변환할 때 정밀도를 보존하라


6장. 배열
__ARR30-C. 경계를 초과한 포인터나 배열 첨자를 만들거나 사용하지 마라
__ARR32-C. 가변 배열에서 크기를 나타내는 인자가 유효한 범위에 있음을 보장하라
__ARR36-C. 같은 배열을 참조하지 않으면 2개의 포인터를 빼거나 비교하지 마라
__ARR37-C. 배열이 아닌 객체에 대한 포인터에 정수를 더하거나 빼지 마라
__ARR38-C. 라이브러리 함수가 유효하지 않은 포인터를 만들지 않도록 보장하라
__ARR39-C. 포인터에 스케일링된 정수를 더하거나 빼지 마라


7장. 문자와 문자열
__STR30-C. 문자열 리터럴을 수정하려고 하지 마라
__STR31-C. 문자열을 위한 공간이 문자 데이터와 널 종료 문자를 담기에 충분함을 보장하라
__STR32-C. 문자열을 처리하는 라이브러리 함수에 널 종료 문자가 없는 문자열을 전달하지 마라
__STR34-C. 문자열을 더 큰 타입인 정수로 변환하기 전에 unsigned char 타입으로 캐스팅하라
__STR37-C. 문자를 처리하는 함수로 전달되는 인자는 반드시 unsigned char로 표현 가능해야 한다
__STR38-C. 와이드와 내로 타입의 문자열과 함수를 혼동하지 마라


8장. 메모리 관리(MEM)
__MEM30-C. 해제된 메모리에 접근하지 마라
__MEM31-C. 동적으로 할당된 메모리는 더 이상 필요 없을 때 해제하라
__MEM33-C. 유연한 배열 멤버를 포함하는 구조체를 동적으로 할당하고 복사하라
__MEM34-C. 동적으로 할당된 메모리만 해제하라
__MEM35-C. 객체에 충분한 메모리를 할당하라
__MEM36-C. realloc() 호출로 객체의 정렬을 수정하지 마라


9장. 입력과 출력(FIO)
__FIO30-C. 포맷 문자열에서 사용자 입력을 배제하라
__FIO31-C. 이미 열려 있는 파일을 다시 열지 마라
__FIO32-C. 파일에만 적용 가능한 연산을 장치에 대해 수행하지 마라
__FIO34-C. 파일에서 읽어야 할 문자와 EOF 또는 WEOF를 구별하라
__FIO37-C. fgets() 또는 fgetws()가 성공 시 비어 있지 않은 문자열을 반환한다고 가정하지 마라
__FIO38-C. 입출력 FILE 객체를 복사하지 마라
__FIO39-C. 플러시나 위치 조정 함수 호출 없이 스트림으로부터 입출력을 교대로 수행하지 마라
__FIO40-C. fgets() 또는 fgetws() 실패 시 문자열을 리셋하라
__FIO41-C. 부수 효과가 있는 스트림 인자로 getc()나 putc(), getws(), putwc()를 호출하지 마라
__FIO42-C. 더 이상 필요 없어진 파일이 적절히 닫혔는지 확인하라
__FIO44-C. fsetpos()에는 fgetpos()에서 반환된 값만 사용하라
__FIO45-C. 파일에 접근하는 동안 TOCTOU 경쟁 상태를 피하라
__FIO46-C. 닫혀 있는 파일에 접근하지 마라
__FIO47-C. 유효한 포맷 문자열을 사용하라


10장. 환경(ENV)
__ENV30-C. 함수에서 반환하는 값을 참조하는 객체를 수정하지 마라
__ENV31-C. 환경 변수의 값을 무효화할 수 있는 연산을 수행했다면 더 이상 그 값에 의존하지 마라
__ENV32-C. 모든 exit 핸들러는 반드시 반환에 의해 종료해야 한다
__ENV33-C. system()을 호출하지 마라
__ENV34-C. 함수에서 반환하는 포인터를 저장하지 마라


11장. 시그널(SIG)
__SIG30-C. 시그널 핸들러에서는 비동기적으로 안전한 함수만 호출하라
__SIG31-C. 시그널 핸들러에서 공유 객체에 접근하거나 수정하지 마라
__SIG34-C. 인터럽트 가능한 시그널 핸들러 안에서 signal()을 호출하지 마라
__SIG35-C. 연산의 예외 시그널 핸들러에서 반환을 하지 마라


12장. 에러 처리(ERR)
__ERR30-C. errno를 사용하는 라이브러리 함수를 호출하기 전에 errno 값을 0으로 설정하고, 함수가 에러를 의미하는 값을 반환했을 때는 errno 값을 체크하라
__ERR32-C. 애매한 errno 값에 의존하지 마라
__ERR33-C. 표준 라이브러리 에러를 발견하고 처리하라


13장. 동시(CON)
__CON30-C. 스레드 지정 공간을 클린업하라
__CON31-C. 뮤텍스가 잠금 상태일 경우에 없애지 마라
__CON32-C. 멀티스레드에서 비트 필드에 접근할 때에 데이터 경쟁을 예방하라
__CON33-C. 라이브러리 함수를 사용할 때 경쟁 상태를 피하라
__CON34-C. 적합한 저장 존속 기간을 가진 스레드 사이에서 공유되는 객체를 선언하라
__CON35-C. 미리 정의된 순서에서 잠금으로 인한 교착 상태를 피하라
__CON36-C. 반복문에서 부정하게 동작할 수 있는 함수를 래핑하라
__CON37-C. 멀티스레드 프로그램에서 signal() 함수를 호출하지 마라
__CON38-C. 조건 변수를 사용할 때 스레드의 안전성과 생존 상태를 보존하라
__CON39-C. 이미 병합되거나 분리됐던 스레드를 다시 사용하지 마라
__CON40-C. 표현식에서 아토믹 변수를 두 번 참조하지 마라
__CON41-C. 반복문에서 부정하게 실패할 수 있는 함수를 래핑하라


14장. 기타
__MSC30-C. 의사 난수를 만들려고 rand() 함수를 사용하지 마라
__MSC32-C. 의사 난수 생성기를 적합하게 시드하라
__MSC33-C. 표준 라이브러리 에러를 발견하고 처리하라
__MSC37-C. 제어식이 void가 아닌 함수의 끝에 도달하지 않도록 보장하라
__MSC38-C. 매크로로 구현되는 객체를 이미 정의된 식별자로 취급하지 마라
__MSC39-C. 지정되지 않은 값을 가진 va_list에서 va_arg() 함수를 호출하지 마라
__MSC40-C. 제한 사항을 위반하지 마라


부록 A. 용어 설명
부록 B. 정의되지 않은 동작
부록 C. 지정되지 않은 동작

저자소개

로버트 C. 시코드 (지은이)    정보 더보기
NCC 그룹의 기술 이사로 C, C++ 및 다른 언어의 시큐어 코딩을 개발하고 가르친다. C 프로그래밍 언어의 국제 표준화 작업 그룹인 ISO/IEC JTC1/SC22/WG14의 전문가이기도 하다. 또한, 『CERT C 프로그래밍 2/e』(에이콘출판, 2022)와 『(개정판) C & C++ 시큐어 코딩』(에이콘출판, 2015), 『자바 시큐어 코딩 가이드라인』(인피니티북스, 2017) 등의 다른 책도 저술했다. 소프트웨어 보안과 구성 요소 기반 소프트웨어 엔지니어링, 웹 기반 시스템 설계, 레거시 시스템 현대화, 구성 요소 저장소 및 검색 엔진 그리고 사용자 인터페이스 설계 및 개발에 관한 50편 이상의 논문도 발표했다.
펼치기
노영찬 (옮긴이)    정보 더보기
롯데 정보통신에서 ERP 시스템 개발을 위해 7년간 프로그래머로 근무했으며 서던캘리포니아 대학교의 Software Engineering 전공으로 대학원을 졸업했다. 현재는 미국 캘리포니아에서 비지니스 솔루션 개발 및 시스템 컨설팅을 위한 Cloud Cornerstore를 설립하고 고객에게 다양한 IT 서비스를 제공하고 있다.
펼치기
이 포스팅은 쿠팡 파트너스 활동의 일환으로,
이에 따른 일정액의 수수료를 제공받습니다.
이 포스팅은 제휴마케팅이 포함된 광고로 커미션을 지급 받습니다.
도서 DB 제공 : 알라딘 서점(www.aladin.co.kr)
최근 본 책