Re: intercepting system calls works on tiger(10.4.5) but not on panther(10.3.9)
site_archiver@lists.apple.com Delivered-To: darwin-dev@lists.apple.com I essentially do the same thing. Only different thing is, I call the system connect call from my connect. I'm attaching the source file, which I compile it as gcc -dynamiclib -o test_connect.dylib -fPIC test_connect.c Then in the terminal, I do - export DYLD_INSERT_LIBRARIES=test_connect.dylib export DYLD_FORCE_FLAT_NAMESPACE=YES and then I run - ftp ftp.gnu.org On tiger, the control first comes into my over-ridden connect, and then the system connect call gets called without any hitch, and FTP goes through. But on panther, I face two kinds of problems, depending on whether I use dlopen or syscall to call the underlying system connect. If I use dlopen, followed by dlsym, then it loops in the over-ridden connect, which is very weird. where as, if I use syscall, then it throws up the following- dyld: FTP multiple definitions of symbol _connect test_connect.dylib(ccyRQhrn.o) definition of _connect /usr/lib/libSystem.B.dylib(connect.So) definition of _connect Trace/BPT trap Any idea on how I can over-come this? - Puthali
Peter O'Gorman <peter@pogma.com> 5/17/2006 7:48:00 pm >>> On Tue, 2006-05-16 at 23:01 -0600, Puthali H.B wrote:
Actually I've a dynamic library which over-rides system calls, namely connect,recv,send,sendto,accept... and when I preload this on Tiger, using DYLD_INSERT_LIBRARIES AND DYLD_FORCE_FLAT_NAMESPACE, everything works fine.
When I pre-loaded this library in terminal and ran FTP got the following error-
dyld: FTP multiple definitions of symbol _connect test_connect.dylib(ccyRQhrn.o) definition of _connect /usr/lib/libSystem.B.dylib(connect.So) definition of _connect Trace/BPT trap
Works for me on panther (10.3.9): peter$ cc -dynamiclib -o test_connect.dylib connect.c peter$ env DYLD_INSERT_LIBRARIES=./test_connect.dylib DYLD_FORCE_FLAT_NAMESPACE=1 ftp ftp.pogma.com Connect Called ftp: connect: Unknown error: 0 ftp> quit peter$ cat connect.c #include <stdio.h> int connect() { fprintf(stderr,"Connect Called\n"); return 1; } I assume that you're doing something different? Peter _______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-dev mailing list (Darwin-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/darwin-dev/site_archiver%40lists.appl... This email sent to site_archiver@lists.apple.com test_connect.c
participants (1)
-
Puthali H.B