LoginSignup
0
0

More than 3 years have passed since last update.

リンク時にsonameを無視(できなかった)

Last updated at Posted at 2020-03-30
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

このような状況で、a.outに(579ではなく)56088を出力させたい。 ただしfunc.soのコンパイルオプションは変更できないものとする。

試行錯誤してみたが、どうしてもpatchelfを使う(2箇所あるpatchelfのうち片方をコメントアウトする)必要があった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0