- 论坛徽章:
- 0
|
小弟我最近在研究动态链接库相关的问题。通过阅读一些资料明白了动态链接库函数的调用原理,即延迟绑定。于是决定自己做个实验试一试。
根据资料中所说,当函数调用过之后,该函数在.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 |
|