Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

306
Views
Can clang Address Sanitizer be used if only main application was compiled with clang?

My application uses static libs compiled with gcc: Boost( C++11 lambdas (with boost bind and boost function)) Bullet; system shared libraries such as SDL, and one shared library compiled with clang. Is it possible that such zoo would mess up AdressSanitizer?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Yes if they're not instrumented:

https://code.google.com/p/address-sanitizer/wiki/AddressSanitizer

In order to use AddressSanitizer you will need to compile and link your program using clang with the -fsanitize=address switch.

over 4 years ago · Santiago Trujillo Report

0

The ASan runtime library must be present in your program, so your main executable needs to be linked with the -fsanitize=address flag. Linking non-instrumented and instrumented libraries together may work, unless instrumented code is executed before the runtime library is initialized (I think it's impossible on Linux right now). Note that AddressSanitizer won't be able to find addressability issues in the code that wasn't instrumented by Clang.

over 4 years ago · Santiago Trujillo Report

0

Clang sanitizers can be used as below

  1. Download clang toolchain from here http://releases.llvm.org/download.html

    $ wget http://releases.llvm.org/9.0.0/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz
    $ tar -Jxvf clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-16.04.tar.xz
    $ CLANG=$PWD/clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-16.04
    
  2. Sample program

    $ cat hello.c
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      int *a = (int *) malloc(sizeof(int)*2);
      int n = atoi(argv[1]);
      a[n] = 10;
      return 0;
    }
    
  3. Compile the program with address sanitizer

    $ $CLANG/bin/clang -O0 -g -fno-omit-frame-pointer -fsanitize=address -o hello hello.c
    
  4. Run

    $ ASAN_SYMBOLIZER_PATH=$CLANG/bin/llvm-symbolizer ./hello 12
    =================================================================
    ==48489==ERROR: AddressSanitizer: heap-buffer-overflow on address 
    0x602000000040 at pc 0x0000004c2981 bp 0x7ffe3f888c30 sp 0x7ffe3f888c28
    WRITE of size 4 at 0x602000000040 thread T0
    #0 0x4c2980 in main /b/syrajendra/clang-libs/hello.c:8:8
    #1 0x7f0349c3a82f in __libc_start_main /build/glibc-Cl5G7W/glibc- 
       2.23/csu/../csu/libc-start.c:291
    #2 0x41b2f8 in _start (/b/syrajendra/clang-libs/hello+0x41b2f8)
    
    Address 0x602000000040 is a wild pointer.
    SUMMARY: AddressSanitizer: heap-buffer-overflow /b/syrajendra/clang- 
    libs/hello.c:8:8 in main
    
    Shadow bytes around the buggy address:
      0x0c047fff7fb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      0x0c047fff7fc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      0x0c047fff7fd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      0x0c047fff7fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      0x0c047fff7ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    =>0x0c047fff8000: fa fa 00 fa fa fa fa fa[fa]fa fa fa fa fa fa fa
      0x0c047fff8010: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x0c047fff8020: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x0c047fff8030: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x0c047fff8040: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x0c047fff8050: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    
    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
    Freed heap region:       fd
    Stack left redzone:      f1
    Stack mid redzone:       f2
    Stack right redzone:     f3
    Stack after return:      f5
    Stack use after scope:   f8
    Global redzone:          f9
    Global init order:       f6
    Poisoned by user:        f7
    Container overflow:      fc
    Array cookie:            ac
    Intra object redzone:    bb
    ASan internal:           fe
    Left alloca redzone:     ca
    Right alloca redzone:    cb
    Shadow gap:              cc
    ==48489==ABORTING
    
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!