On Mon, Jul 28, 2014 at 1:25 PM, ji wang <[email protected]> wrote: > Hi, kcc > >>On Linux, you typically have to link the asan run-time to the >>executable, but see >>https://code.google.com/p/address-sanitizer/wiki/AsanAsDso > > Do we have to use LD_PRELOAD to preload this asan run-time Dso to the > process before this Asan instrumented executable run?And why? > I've tried not preload the asan run-time at first, and I got the > "AddressSanitizer: failed to intercept 'memcpy'" error, And I tried to fix > it by this modification of the code: > > --- a/gcc-4.9/libsanitizer/interception/interception_linux.cc > +++ b/gcc-4.9/libsanitizer/interception/interception_linux.cc > @@ -12,13 +12,31 @@ > > namespace __interception { > bool GetRealFunctionAddress(const char *func_name, uptr *func_addr, > uptr real, uptr wrapper) { > + char *err; > + void *handle = dlopen("libc.so", RTLD_NOW); > - *func_addr = (uptr)dlsym(RTLD_NEXT, func_name); > + *func_addr = (uptr)dlsym(handle, func_name); > + err = (char *)dlerror(); > + if(err){ > + Printf("---GetRealFunctionAddress: error in dlsym: (%s)\n", err); > + } > + dlclose(handle); > > return real == wrapper; > } > And after this modification, everything went ok. Dose this code modified > properly? Or have any side effect?
This is actually interesting. RTLD_NEXT is almost completely broken on Android, and this looks like a valid workaround. I'll think about using it by default. -- You received this message because you are subscribed to the Google Groups "address-sanitizer" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
