Marvee Amasi
Marvee Amasi
DIIDevHeads IoT Integration Server
Created by Marvee Amasi on 7/23/2024 in #middleware-and-os
LD_PRELOAD Not Working with Custom getpid Function
I'm trying to use the LD_PRELOAD to inject my custom function in a program. I've compiled a shared library getpid.so having a modified getpid function that prints a message:
#include <sys/syscall.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

pid_t getpid(void)
{
printf("Initializing..\n");
return syscall(SYS_getpid);
}
#include <sys/syscall.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

pid_t getpid(void)
{
printf("Initializing..\n");
return syscall(SYS_getpid);
}
I've also compiled a program testpid.c that calls the regular getpid function:
#include <sys/syscall.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
printf( "pid = %d!\n", getpid() );

return 0;
}
#include <sys/syscall.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
printf( "pid = %d!\n", getpid() );

return 0;
}
When I run the command:
LD_PRELOAD=./getpid.so ./testpid
LD_PRELOAD=./getpid.so ./testpid
I get the following error:
ERROR: ld.so: object 'getpid.so' from LD_PRELOAD cannot be preloaded: ignored
ERROR: ld.so: object 'getpid.so' from LD_PRELOAD cannot be preloaded: ignored
I've compiled both files with gcc -Wall -fPIC -shared -o getpid.so getpid.c and gcc testpid -o testpid.c Can anyone help me understand why LD_PRELOAD is not working and how to fix the issue?
5 replies