03-22-2008
LD_PRELOAD on x86_64 gives error from ld.so
I have implemented an interposer for open() and open64() system call.
This interposer is implemented in interposer.c and I have compiled it in a shared library (libinterposer.so) using the following commands:
gcc -g -fPIC -s -o interposer.o -c interposer.c
gcc -s -g -shared -nostartfiles -o libinterposer.so interposer.o -ldl
This interposer is working on i686 architecture. When I say working, it means, I can set the LD_PRELOAD environment variable to 'libinterposer.so' and intercept all 'open' system calls.
However when I repeat the exact same steps on a x86_64, I get errors from ld.so like so:
manmukhe@sjc-lds-133:[lbt]echo $LD_PRELOAD
libinterposer.x86_64.so
manmukhe@sjc-lds-133:[lbt]touch x.c
ERROR: ld.so: object 'libinterposer.x86_64.so' from LD_PRELOAD cannot be preloaded: ignored.
The file types for libinterposer.so and touch are as follows:
manmukhe@sjc-lds-133:[lbt]file libinterposer.x86_64.so
libinterposer.x86_64.so: ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), stripped
manmukhe@sjc-lds-133:[lbt]file /bin/touch
/bin/touch: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.4.0, dynamically linked (uses shared libs), stripped
Here are my questions:
1. What am I doing wrong? Why am I getting the ld.so error?
2. Is there any way to suppress the ld.so errors?
8 More Discussions You Might Find Interesting
1. Linux
hello everybody i want to install some package on AIX 5.3
the name of rpm is something like libaio-0.3.106-4.2.x86_64.rpm is it a good rpm for AIX 5.3
my question is is AIX and x86_64 mean the same thing !
thanks (2 Replies)
Discussion started by: eternalflame
2 Replies
2. HP-UX
Hi ,
Is LD_PRELOAD supported on HP UX?
I am having issues when i export the below
export LD_PRELOAD=/usr/local/vertex/commtax_1.0.16/64bit/lib/libctq.so
ldd /usr/local/vertex/commtax_1.0.16/64bit/lib/libctq.so
/usr/lib/hpux64/dld.so: Unable to find library 'libodbc.so'.
Killed
Can... (2 Replies)
Discussion started by: psreddy1234
2 Replies
3. UNIX for Advanced & Expert Users
Hi,
What does LD_PRELOAD variable signify on HP-UX?
thanks in advance,
-Ashish (4 Replies)
Discussion started by: shriashishpatil
4 Replies
4. UNIX for Advanced & Expert Users
well i know what LD_PRELOAD is. Now suppose i have hooked a function XDrawString in the my library (Mylib.so.1) and then used the command
export LD_PRELOAD=/path/mylib.so.1
Now suppose i open Xeditor by typing 'xeditor' in the console, my library is geting used, so i knw that this applilcation is... (3 Replies)
Discussion started by: manchester
3 Replies
5. Shell Programming and Scripting
Hi, experts,
I am trying to intall Perl/Tk module (Tk-804.028 ) into Perl5.6.1, however, the directory structure seems to be different from i386 than x86_64 and the installation keeps failing. Is this a known/common issue? Or does anyone has any workaround for this?
~* Dniz *~ (0 Replies)
Discussion started by: dniz
0 Replies
6. UNIX for Advanced & Expert Users
Dear Fellows;
As being new to linux, i have tried to synamically load a custom library which overrides some system calls like conncet(), socket() etc.... for custom purposes.
It works well, if declaring the environment path LD_PRELOAD and execution of the application to be override... (0 Replies)
Discussion started by: mzeeshan
0 Replies
7. Solaris
I have always seen a Solaris 10 32 bit version..Is there an x86_64?? (2 Replies)
Discussion started by: kirtikjr
2 Replies
8. Programming
I had it working but i screwed up something and now i get
me@mymachine:~$ LD_PRELOAD=/home/me/libf1.o ldd FCaller
ERROR: ld.so: object '/home/me/libf1.o' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object '/home/me/libf1.o' from LD_PRELOAD cannot be preloaded: ignored.
ERROR:... (3 Replies)
Discussion started by: NetworkLearning
3 Replies
LEARN ABOUT PHP
socketcall
SOCKETCALL(2) Linux Programmer's Manual SOCKETCALL(2)
NAME
socketcall - socket system calls
SYNOPSIS
#include <linux/net.h>
int socketcall(int call, unsigned long *args);
DESCRIPTION
socketcall() is a common kernel entry point for the socket system calls. call determines which socket function to invoke. args points to
a block containing the actual arguments, which are passed through to the appropriate call.
User programs should call the appropriate functions by their usual names. Only standard library implementors and kernel hackers need to
know about socketcall().
call Man page
SYS_SOCKET socket(2)
SYS_BIND bind(2)
SYS_CONNECT connect(2)
SYS_LISTEN listen(2)
SYS_ACCEPT accept(2)
SYS_GETSOCKNAME getsockname(2)
SYS_GETPEERNAME getpeername(2)
SYS_SOCKETPAIR socketpair(2)
SYS_SEND send(2)
SYS_RECV recv(2)
SYS_SENDTO sendto(2)
SYS_RECVFROM recvfrom(2)
SYS_SHUTDOWN shutdown(2)
SYS_SETSOCKOPT setsockopt(2)
SYS_GETSOCKOPT getsockopt(2)
SYS_SENDMSG sendmsg(2)
SYS_RECVMSG recvmsg(2)
SYS_ACCEPT4 accept4(2)
SYS_RECVMMSG recvmmsg(2)
SYS_SENDMMSG sendmmsg(2)
CONFORMING TO
This call is specific to Linux, and should not be used in programs intended to be portable.
NOTES
On a some architectures--for example, x86-64 and ARM--there is no socketcall() system call; instead socket(2), accept(2), bind(2), and so
on really are implemented as separate system calls.
On x86-32, socketcall() was historically the only entry point for the sockets API. However, starting in Linux 4.3, direct system calls are
provided on x86-32 for the sockets API. This facilitates the creation of seccomp(2) filters that filter sockets system calls (for new
user-space binaries that are compiled to use the new entry points) and also provides a (very) small performance improvement.
SEE ALSO
accept(2), bind(2), connect(2), getpeername(2), getsockname(2), getsockopt(2), listen(2), recv(2), recvfrom(2), recvmsg(2), send(2),
sendmsg(2), sendto(2), setsockopt(2), shutdown(2), socket(2), socketpair(2)
COLOPHON
This page is part of release 4.15 of the Linux man-pages project. A description of the project, information about reporting bugs, and the
latest version of this page, can be found at https://www.kernel.org/doc/man-pages/.
Linux 2017-09-15 SOCKETCALL(2)