이미 소장하고 있다면 판매해 보세요.
1장. C 시작하기
__첫 번째 C 프로그램 개발하기 ____프로그램 컴파일 및 실행 ____전처리기 지시문 ____main 함수 ____함수 반환 값 확인 ____출력 형식 __편집기 및 통합 개발 환경 __컴파일러 ____GNU 컴파일러 모음 ____Clang ____마이크로소프트 Visual Studio __이식성 ____구현 정의 동작 ____미지정 동작 ____미정의 동작 ____로케일 별 동작 및 공통 확장 __요약 2장. 개체와 함수, 형식 __개체와 함수, 형식, 그리고 포인터 __변수 선언 ____값 바꾸기 (첫 번째 시도) ____값 바꾸기 (두 번째 시도) __범위 __스토리지 기간 __맞춤 __개체 형식 ____부울 형식 ____문자 형식 ____숫자 형식 ____void 형식 __함수 형식 __파생된 형식 ____포인터 형식 ____배열 ____구조체 ____공용체 __태그 __형식 한정자 ____const ____volatile ____restrict __연습 문제 __요약 3장. 산술 형식 __정수 ____패딩과 정밀도 ____〈limits.h〉 헤더 파일 ____정수 선언하기 ____부호가 없는 정수 ____부호가 있는 정수 ____정수 상수 __부동 소수점 ____부동 소수점 형식 ____부동 소수점 산술 ____부동 소수점 값 ____부동 소수점 상수 __산술 변환 ____정수 변환 순위 ____정수 확장 ____일반 산술 변환 ____암시적 변환의 예 ____안전한 변환 __요약 4장. 식과 연산자 __단순 할당 __평가 __함수 호출 __증가 및 감소 연산자 __연산자 우선순위 및 결합성 __평가 순서 ____비순차적 평가와 규정되지 않은 순차적 평가 ____시퀀스 포인트 __sizeof 연산자 __산술 연산자 ____단항 연산자 +와 - ____논리 부정 연산자 ____곱하기 연산자 ____더하기 연산자 __비트 연산자 ____보수 연산자 ____시프트 연산자 ____비트 AND 연산자 ____비트 배타적 OR 연산자 ____비트 포괄적 OR 연산자 __논리 연산자 __캐스트 연산자 __조건부 연산자 ___Alignof 연산자 __관계형 연산자 __복합 할당 연산자 __쉼표 연산자 __포인터 산술 __요약 5장. 흐름 제어 __식 문 __복합 문 __선택 문 ____if 문 ____switch 문 __반복문 ____while 문 ____do...while ____for 문 __점프 문 ____goto 문 ____continue 문 ____break 문 ____return 문 __연습 문제 __요약 6장. 동적으로 할당된 메모리 __스토리지 기간 ____힙과 메모리 관리자 ____동적으로 할당된 메모리를 사용하는 경우 __메모리 관리 함수 ____malloc 함수 ____aligned_alloc 함수 ____calloc 함수 ____realloc 함수 ____reallocarray 함수 ____free 함수 __메모리 상태 __유연한 배열 멤버 __동적으로 할당된 다른 스토리지 ____alloca 함수 ____가변 길이 배열 __할당된 스토리지 문제 디버깅하기 ____Dmalloc ____안전이 중요한 시스템 __연습 문제 __요약 7장. 문자와 문자열 __문자 ____ASCII ____유니코드 ____소스 및 실행 문자 집합 ____데이터 형식 ____문자 상수 ____이스케이프 문자 ____Linux ____Windows ____문자 변환 __문자열 ____문자열 리터럴 __문자열 처리 함수 ____〈string.h〉와 〈wchar.h〉 ____부속서 K 경계 검사 인터페이스 ____POSIX ____Microsoft __요약 8장. 입출력 __표준 입출력 스트림 ____스트림 버퍼링 ____미리 정의된 스트림 ____스트림 방향 ____텍스트 및 이진 스트림 __파일 열기 및 만들기 ____fopen 함수 ____POSIX open 함수 __파일 닫기 ____fclose 함수 ____POSIX close 함수 __문자와 줄을 읽고 쓰기 __스트림 플러싱 __파일에서 위치 설정하기 __파일 삭제하기 및 이름 바꾸기 __임시 파일 사용하기 __형식이 있는 텍스트 스트림 읽기 __이진 스트림에서 읽기 및 쓰기 __요약 9장. 전처리기 __컴파일 과정 __파일 포함 ____따옴표 및 홑화살괄호 포함 문자열 __조건부 포함 ____오류 만들기 ____헤더 보호기 사용하기 __매크로 정의 ____매크로 대체 ____형식 제네릭 매크로 ____미리 정의된 매크로 __요약 10장. 프로그램 구조 __구성 요소화의 원칙 ____결합도와 응집도 ____코드 재사용 ____데이터 추상화 ____불투명 형식 __실행 파일 __링크 __간단한 프로그램 구조화하기 __코드 빌드하기 __요약 11장. 디버깅과 테스트, 분석 __어설션 ____정적 어설션 ____런타임 어설션 __컴파일러 설정 및 플래그 ____GCC 및 Clang ____Visual C++ __디버깅 __단위 테스트 __정적 분석 __동적 분석 ____AddressSanitizer __연습 문제 __요약 |
저로버트 C. 시코드
관심작가 알림신청Robert C. Seacord
로버트 C. 시코드의 다른 상품
역박정재
관심작가 알림신청역장준원
관심작가 알림신청역장기식
관심작가 알림신청장기식의 다른 상품
* 이 책에서 다루는 내용
-C 프로그램에서 정의되지 않은 동작을 식별하고 처리하는 방법 -정수 및 부동 소수점 값의 범위 및 표현 -동적 메모리 할당이 작동하는 방법과 비표준 함수를 사용하는 방법 -문자 인코딩 및 형식을 사용하는 방법 -C 표준 스트림 및 POSIX 파일 설명자를 사용해 터미널과 파일 시스템에서 I/O를 수행하는 방법 -C 컴파일러의 변환 단계와 전처리기의 역할을 이해하는 방법 -C 프로그램을 테스트하고 디버그하며 분석하는 방법 * 이 책의 대상 독자 C 언어에 대한 입문서로 C 프로그래밍을 배우고자 하는 모든 사람이 쉽게 이해할 수 있도록 작성했다. 즉, 다른 많은 입문서와 강좌처럼 C 프로그래밍을 지나치게 단순화하지 않았다. *이 책의 구성 1장, ‘C로 시작하기’에서는 main 함수 사용에 익숙해지도록 간단한 C 프로그램을 작성한다. 또한 편집기와 컴파일러에 대한 몇 가지 옵션을 살펴본다. 2장, ‘개체와 함수, 형식’에서는 변수와 함수를 선언하는 것과 같은 기본적인 내용을 알아본다. 또한 기본 형식을 사용하는 원칙도 소개한다. 3장, ‘산술 형식’에서는 두 종류의 산술 형식인 정수 형식과 부동 소수점 형식에 관해 알아본다. 4장, ‘식과 연산자’에서는 연산자와 다양한 개체 형식에 대한 연산을 수행하기 위해 간단한 식을 작성하는 방법을 소개한다. 5장, ‘흐름 제어’에서는 각 문(statement)이 평가되는 순서를 제어하는 방법을 알아본다. 먼저 수행할 작업을 정의하는 표현문(expression statements)과 복합문(compound statements)을 알아본다. 그런 다음 실행할 코드 블록을 결정하는 선택(selection)과 반복(iteration), 점프(jump) 세 종류의 문을 살펴본다. 6장, ‘동적으로 할당된 메모리’에서는 런타임에 힙(heap)에서 할당되는 동적으로 할당된 메모리(dynamically allocated memory)에 관해 알아본다. 동적으로 할당된 메모리는 런타임 전에 프로그램에 대한 정확한 스토리지 요구 사항을 알 수 없는 경우에 유용하다. 7장, ‘문자와 문자’에서는 ASCII와 유니코드를 포함한 다양한 문자열 집합을 알아본다. C 표준 라이브러리의 레거시(legacy) 함수와 경계 확인 인터페이스(bounds-checked interfaces), 그리고 POSIX와 Windows API를 사용해 문자열을 표현하고 조작하는 방법을 살펴본다. 8장, ‘입력/출력’에서는 터미널 및 파일 시스템(filesystem)에서 데이터를 읽거나 쓰기 위해 입력/출력(입출력, Input/Output) 연산을 수행하는 방법을 알아본다. 입출력은 정보가 프로그램에 들어오고 나가는 모든 방법을 포함하며, 입출력을 하지 못하면 프로그램은 쓸모가 없다. C 표준 스트림(stream)과 POSIX 파일 설명자를 사용하는 방법을 소개한다. 9장, ‘전처리기’에서는 전처리기를 사용해 파일을 포함하고, 개체 같은 매크로와 함수 같은 매크로를 정의하고, 구현체에 정의된 기능에 따라 코드를 조건부로 포함하는 방법을 알아본다. 10장, ‘프로그램 구조’에서는 프로그램을 소스 파일과 포함(include) 파일로 구성된 여러 변환 단위로 구조화하는 방법을 알아본다. 또한 여러 개체 파일을 함께 연결해 라이브러리와 실행 파일을 만드는 방법도 살펴본다. 11장, ‘디버깅과 테스트, 분석’에서는 컴파일 타임과 런타임 어설션(assertion), 디버깅, 테스트, 정적 분석 그리고 동적 분석을 포함해 정확하고 효과적이며 안전하고 보안성을 제공하며 강건한 프로그램을 만드는데 필요한 도구와 기술을 설명한다. 또한 소프트웨어 개발 프로세스의 여러 단계에서 사용할 수 있는 컴파일러 플래그에 대해서도 알아본다. * 옮긴이의 말 사이버 보안 관련 일을 하기 시작하면서 C 언어로 작성된 코드에서 사소한 오류로 인해 큰 보안 사고가 발생하는 것을 직접 목격했습니다. 이로 인해 시큐어 코딩이라는 개념을 접하게 됐고, 이제는 시큐어 코딩을 코드 작성 초기부터 적용하는 것이 기본이 됐습니다. 이 책은 다른 C 언어 프로그래밍 입문서와는 다릅니다. 표준 C 언어 문법부터 시큐어 코딩에 필요한 디버깅, 정적 분석 및 동적 분석에 이르기까지 폭넓은 내용을 담고 있습니다. 그래서 초보자에게는 다소 어려울 수 있는데, 특히 안전한 코드 작성에 필요한 취약점에 관한 내용이 나오고, 버그가 발생할 수 있는 코드의 예와 이를 해결할 방법까지도 제시합니다. C 언어의 기본 문법을 어느 정도 알고 있는 독자라면 책 뒷부분에 나오는 메모리 할당과 입출력, 프로그램 구조, 디버깅, 단위 테스트 그리고 정적 분석 및 동적 분석의 내용을 꼼꼼하게 익히길 바랍니다. 전부 시큐어 코딩에 필요한 요소입니다. 저자는 성능이 우수하면서도 안전하며 보안성을 갖춘 코드를 작성하는 것을 강조합니다. C 프로그램에서 정의되지 않은 동작이 발생하는 것을 막을 수 있도록 저자가 소개하는 모든 방법과 도구를 활용해 시큐어 코딩을 익힐 수 있길 바랍니다. |
ffective C는 여러분에게 현대 시대를 위한 C 프로그래밍을 가르쳐 줄 것이다. 이 책은 여러분이 자발적이든 과실이든 정의되지 않은 동작을 사용하지 않도록 좋은 습관을 들이는 데 도움이 될 것이다. 대형 C 프로그램에서 일반적인 프로그래밍 오류만 없애는 것만으로는 임의의 입력으로 인해 발생하는 정의되지 않은 동작을 막을 수는 없다고 독자들에게 경고한다.
이 책이 강조하는 C 프로그래밍의 보안 측면은 타의 추종을 불허한다. 내 개인적인 권고사항은 책을 읽은 후 여러분이 작성하는 C 프로그램에서 정의되지 않은 동작을 막기 위해 이 책에서 알려주는 도구를 모두 활용해야 한다는 것이다. - 파스칼 쿠오크(Pascal Cuoq) (TrustInSoft 수석 과학자) |
오늘날 우리는 여전히 보안성 높고 전문적인 C를 작성하는 데 있어 수많은 도전에 직면해 있다. 컴파일러 및 시스템 수준의 완화에 대한 많은 혁신이 정기적으로 훼손될 수 있으며 실제로 그래왔다. 그리고 다른 현대 언어가 진보적인 혁신을 보이는 동안에도 특히 IoT 등 고도의 자원 제한적인 환경에서 C의 수요는 여전히 증가하고 있다.
로버트는 C에서 전문적이며 보안성 높게 프로그래밍하는 방법에 관한 권위자다. 10년 넘게 고객과 팀 내부의 모두에게 그의 자료를 추천해왔다. 전문적으로 그리고 무엇보다도 안전한 방식으로 C를 코딩하는 방법을 가르치는 데 있어 더 좋은 사람은 없다. 오늘날 전문적인 C를 작성한다는 것은 곧 우수하고 안전하며 보안성 높은 코드 작성을 의미한다. 이렇게 하면 기술적으로 신세를 지지 않고도 연결된 사회에 기여할 수 있다. 이 책은 C 경험이 거의 혹은 전혀 없는 사람들이 전문 C 프로그래머가 될 수 있도록 지식과 기법을 빠르게 개발하게 도와주며 우수하고 안전한 동시에 보안성 있는 시스템 개발에 크게 이바지할 것이다. - 올리 화이트하우스(Ollie Whitehouse), (Global CTO, NCC Group) |