func.c
int op(int x,int y){return x+y;}
gateway.c
int op(int x,int y);
int gateway(){return op(123,456);}
main.c
#include <stdio.h>
int gateway();
int main(){
printf("%d\n",gateway());
}
main.sh
mkdir -p mul
cat func.c | gcc -O2 -s -shared -Wl,-soname,func.so -o func.so -xc -
cat func.c | sed 's/+/*/' | gcc -O2 -s -shared -Wl,-soname,func.so -o mul/func.so -xc -
#patchelf --set-soname '' mul/func.so
gcc -O2 -s -shared -o gateway.so gateway.c $PWD/mul/func.so
#patchelf --replace-needed func.so $PWD/mul/func.so gateway.so
gcc -O2 -s main.c gateway.so
./a.out
In dieser Situation möchte a.out 56088 (anstelle von 579) ausgeben. ** Die Kompilierungsoptionen von func.so können jedoch nicht geändert werden. ** ** **
Nach einigem Ausprobieren musste ich Patchelf verwenden (eines der beiden Patchelfs auskommentieren).