clang 레코드
#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 가 있 습 니 다.자, 컴 파일 해 보 세 요: 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 에서 사용 할 수 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.