linux下更换动态链接库的问题

前言

哦!

更换动态链接库的装载路径

用于设置动态库的路径 export LD_LIBRARY_PATH
这样程序会在该路径下寻找动态链接库,但不会是优先加载的路径
设置export LD_PRELOAD=”./myhack.so” #设置LD_PRELOAD环境变量,库中的同名函数在程序运行时优先调用
可以来做个实验。

实验一

编写test.c

#include<stdio.h>
#include<string.h>
void main() {
char passwd[] = "password";
char str[128];
scanf("%s", &str);
if (!strcmp(passwd, str)) {
printf("correct\n");
return;
}
printf("invalid\n");
}

编写hack.so

#include<stdio.h>
#include<stdio.h>
int strcmp(const char *s1, const char *s2) {
printf("hacked\n");
return 0;
}

编译成动态链接库
gcc -shared -o hack.so hack.c
设置LD_PRELOAD
LD_PRELOAD="./hack.so" ./a.out
然后执行便可以发现,strcmp函数成功被我们劫持了。

实验二

在CTF中我们常常需要加载另外的glibc,所以我们先来尝试直接设置LD_PRELOAD
这里写图片描述
提示无法加载,23333,不是说好能行的么。
找了好久了原因,是因为ld.so的问题,我们需要更改
未完待续

猜你喜欢

转载自blog.csdn.net/qq_33438733/article/details/81196618