Intercepting calls in PIC mode

看板FB_current作者時間11年前 (2014/07/04 20:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/3 (看更多)
Hello, Consider the following: --- #include <stdio.h> #include <string.h> extern "C" void* memset(void *block, int c, size_t size) __attribute__((weak, alias("__int_memset"), visibility("default"))); extern "C" __attribute__((visibility("default"))) void* __int_memset(void *block, int c, size_t size) { puts("Hello"); return NULL; } int main() { void *(*F)(void *b, int c, size_t len) = memset; char a[5]; memset(a, 0, sizeof(a)); F(a, 0, sizeof(a)); return 0; } --- It intercepts the memset() calls without issue on both x86-64 FreeBSD 9.2 and Linux. However, with the -fPIC option specified in the cc's command line, only the first (direct) call work on FreeBSD, but not the second (indirect) one. Note is that on Linux both the calls are intercepted--no matter whether the -fPIC option is specified or not. The question is: is there a way to intercept indirect calls on FreeBSD? Thanks, -- _______________________________________________ freebsd-current@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
文章代碼(AID): #1Jjfx2YY (FB_current)
文章代碼(AID): #1Jjfx2YY (FB_current)