clang 레코드

  • clang: C 언어 컴 파일 러, gcc
  • 와 유사
  • clang +: C + + 컴 파일 러, g + 와 유사 합 니 다.clang + + 는 clang 의 별명 일 뿐 입 니 다.
  • ld: 링크 기, ld 와 유사 합 니 다.그러나 기본적으로 사용 하지 않 습 니 다. 기본적으로 vc 의 link. exe 를 사용 합 니 다.
  • clang - format: 고정된 규범 에 따라 C / C + + 코드 를 포맷 하여 매우 스마트 합 니 다.문서 참조:http://clang.llvm.org/docs/ClangFormat.html
  • clang - modernize: C + 98 표준 에 따라 쓴 코드 를 C + + 11 표준 으로 변환 합 니 다.문서 참조:http://clang.llvm.org/extra/ModernizerUsage.html
  • llvm - as - LLVM 어셈블러
  • llvm - dis - LLVM 어셈블러
  • opt - LLVM 최적화 기
  • llc - LLVM 정적 컴 파일 러
  • lli - LLVM 의 바이트 실행 기 (일부 플랫폼 에서 JIT 지원)
  • llvm - link - LLVM 의 바이트 코드 링크 기
  • llvm - ar - LLVM 의 정적 라 이브 러 리 패키지, 유 닉 스 와 유사 한 ar.
  • llvm - nm - 유 닉 스 와 유사 한 nm Sanitizer clang 은 사 니 티 저 기능 이 있다.그것 은 세 가 지 를 포함한다. Address Sanitizer, Memory Sanitizer, ThreadSanitizer.Address Sanitizer 와 Memory Sanitizer 는 처음에 구 글 에서 개발 한 것 으로 실행 시 C / C + 프로그램의 메모리 오 류 를 감지 하 는 데 사 용 됩 니 다.컴 파일 할 때 - fsanitizer 인 자 를 추가 하면 컴 파일 러 는 생 성 된 코드 에 실행 시 검 사 를 삽입 합 니 다.예 를 들 어 아래 코드 를 가지 고 시험 해 볼 수 있 습 니 다.
    #include <stdio.h> #include <string.h> int main(int argc,char* argv[]){ char buf[4]; strcpy(buf,argv[1]); printf("%s
    "
    ,buf); return 0; }
    명령 행 의 첫 번 째 매개 변 수 를 임시 캐 시 구역 에 복사 한 다음 에 인쇄 할 수 있 습 니 다.이 코드 는 두 개의 bug 가 있 습 니 다.
  • argv 를 방문 할 때 경 계 를 넘 을 수 있 습 니 다.(사용자 가 실행 할 때 인자 가 추가 되 지 않 았 습 니 다)
  • buf 가 길지 않 아서 기록 할 때 경 계 를 넘 을 수 있 습 니 다. 이것 은 심각 한 안전 구멍 을 초래 할 수 있 습 니 다.

  • 자, 컴 파일 해 보 세 요: C: > clang + - fsanitize = address - o t. exe badcode. cpp - g3 - DEBUG - DDEBUG 다음 실행: C: > t 3  3  C:>t 355  355  C:>t 3554664  =================================================================  ==4044==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x0024fd44 at  pc 0x1274038 bp 0xdeadbeef sp 0x24fbf0  WRITE of size 8 at 0x0024fd44 thread T0  #0 0x127404c wrap_strcpy c:\users\cm\documents\os\llvm-3.4\projects\compile  r-rt\lib\asan\asan_interceptors.cc:490  #1 0x12612a7 main+0x0x000002a7  #2 0x1278212 __tmainCRTStartup f:\dd\vctools\crt\crtw32\startup\crt0.c:255  #3 0x772d3369 BaseThreadInitThunk+0x0x00000011  #4 0x77ba9f71 RtlInitializeExceptionChain+0x0x00000062  #5 0x77ba9f44 RtlInitializeExceptionChain+0x0x00000035  Address 0x0024fd44 is located in stack of thread T0 at offset 228 in frame  #0 0x126100f main+0x0x0000000f  This frame has 4 object(s):  [32, 36) ”  [96, 100) ”  [160, 164) ”  [224, 228) ‘buf’ <== Memory access at offset 228 overflows this variable  HINT: this may be a false positive if your program uses some custom stack unwind  mechanism or swapcontext  (longjmp and C++ exceptions *are* supported)  SUMMARY: AddressSanitizer: stack-buffer-overflow ??:0 ??  Shadow bytes around the buggy address:  0x20049f50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  0x20049f60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  0x20049f70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  0x20049f80: 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1  0x20049f90: 04 f4 f4 f4 f2 f2 f2 f2 04 f4 f4 f4 f2 f2 f2 f2  =>0x20049fa0: 04 f4 f4 f4 f2 f2 f2 f2[04]f4 f4 f4 f3 f3 f3 f3  0x20049fb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  0x20049fc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  0x20049fd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  0x20049fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  0x20049ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  Shadow byte legend (one shadow byte represents 8 application bytes):  Addressable: 00  Partially addressable: 01 02 03 04 05 06 07  Heap left redzone: fa  Heap right redzone: fb  Freed heap region: fd  Stack left redzone: f1  Stack mid redzone: f2  Stack right redzone: f3  Stack partial redzone: f4  Stack after return: f5  Stack use after scope: f8  Global redzone: f9  Global init order: f6  Poisoned by user: f7  ASan internal: fe  ==4044==ABORTING  오 류 를 미리 감지 하고 프로그램 을 종료 합 니 다. 그러나 memory sanitizer 는 현재 windows 에서 사용 할 수 없습니다.

    좋은 웹페이지 즐겨찾기