Chinaunix
标题:
求助:为何调用过的动态链接库函数在.got.plt节中对应的槽不是函数真正的地址?
[打印本页]
作者:
Michaelbest002
时间:
2014-11-28 13:36
标题:
求助:为何调用过的动态链接库函数在.got.plt节中对应的槽不是函数真正的地址?
小弟我最近在研究动态链接库相关的问题。通过阅读一些资料明白了动态链接库函数的调用原理,即延迟绑定。于是决定自己做个实验试一试。
根据资料中所说,当函数调用过之后,该函数在.got.plt节中所对应的槽中应该填的就是函数真正的地址。但在实验中,我读取了相应位置的代码,发现还是plt节中第二条指令的地址。
我百思不得其解。哪位大神能帮小弟我解释一下?
我的测试程序:
#include <stdio.h>
#include <string.h>
typedef unsigned long u_l;
int main()
{
char *p_ch = strstr("abc", "b");
printf("result = %s\n", p_ch);
long long *p = (long long *) &strstr;
printf("data = %llx\n", *(p));
long long k = *p >> 16;
u_l *entry_addr = (u_l *)(k & 0x00000000ffffffff);
printf("entry_addr = %lx\n", entry_addr);
u_l *func_addr = (u_l *)*entry_addr;
printf("func_addr = %lx\n", func_addr);
printf("code = %llx\n", *func_addr);
return 0;
}
复制代码
输出:
result = bc
data = 680804a00c25ff
entry_addr = 804a00c
func_addr = 8048326
code = 68080400000068
作者:
super皮波
时间:
2014-11-28 14:14
你这测试想达到什么目的,没看懂。。
作者:
Michaelbest002
时间:
2014-11-28 15:00
回复
2#
super皮波
我是想去偷库函数的代码
作者:
super皮波
时间:
2014-11-28 15:12
回复
3#
Michaelbest002
偷?
你的偷指的是什么
作者:
Michaelbest002
时间:
2014-11-28 16:41
回复
4#
super皮波
就是读取库函数的代码
作者:
super皮波
时间:
2014-11-28 16:46
你链接到的库函数都是二进制的数据,你看不懂的
直接读库函数的源码
作者:
super皮波
时间:
2014-11-28 16:47
库函数源码不用偷,有现在的,大大方方的就能读
作者:
super皮波
时间:
2014-11-28 16:47
有现成的,大大方方的就能读
作者:
Michaelbest002
时间:
2014-11-30 08:26
回复
8#
super皮波
我当然知道可以大大方方的读的呀,我不会笨到那个地步。这么干自然有我的目的呀。
作者:
super皮波
时间:
2014-11-30 09:49
回复
9#
Michaelbest002
什么目的?
作者:
Michaelbest002
时间:
2014-11-30 14:11
回复
10#
super皮波
做学术研究。哥们如果有兴趣可以去搜搜JIT-ROP (Just-in-time Return-Oriented Programming)。我这个只是个简单的实验。
作者:
super皮波
时间:
2014-11-30 16:22
没接触过JIT-ROP
作者:
super皮波
时间:
2014-11-30 16:22
没接触过JIT-ROP
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2