首页
社区
课程
招聘
elf---PLT和GOT节相关的细节
发表于: 2020-12-1 09:42 3535

elf---PLT和GOT节相关的细节

2020-12-1 09:42
3535

PLT, Procedure Linkage Table, 过程链接表
GOT, Global Offset Table, 全局偏移表

简略来说就是从PLT去GOT找api真实地址。

有一个延迟绑定的机制,默认开启,和这2个表有关。延迟绑定大概就是说我先不绑定提到的api,等你用的时候我再绑定你用的api,这样来避免启动时间浪费。有的人可能就想,我就不延迟绑定,我不在乎启动时间,我就要直接全部绑定好,用的时候不就快了吗,也可以,因为延迟绑定是可以关闭的。

观察elf,发现有4个相关的节,分别是:

下面举个例子,看一下节的关系,代码如下(后面都用这个例子):

朴实无华的helloworld,先默认编译:

然后用IDA看一下printf是怎么找到的(这里优化成了puts):

点一下 _puts,来到了 .plt:

跟过去,到了 .got.plt:

-z now 选项,可以关闭延迟绑定,编译命令如下:

然后用IDA跟踪一下:

点一下 puts,来到了 .plt.got:

跟过去,到了 .got:

跟踪下来可以确定:
如果开启了延迟绑定(默认情况),节跳转是:

如果关闭了延迟绑定(-z now),节跳转是:

感谢atQ4n

20201201

 
 
 
.plt
.plt.got
.got
.got.plt
.plt
.plt.got
.got
.got.plt
// test.c x64
#include <stdio.h>
 
int main(){
    printf("Hello World!\n");
    return 0;
}
// test.c x64
#include <stdio.h>
 
int main(){
    printf("Hello World!\n");
    return 0;
}
gcc -o test test.c
gcc -o test test.c
.text:0000000000400526 main            proc near               ; DATA XREF: _start+1D↑o
.text:0000000000400526 ; __unwind {
.text:0000000000400526                 push    rbp
.text:0000000000400527                 mov     rbp, rsp
.text:000000000040052A                 mov     edi, offset s   ; "Hello World!"
.text:000000000040052F                 call    _puts
.text:0000000000400534                 mov     eax, 0
.text:0000000000400539                 pop     rbp
.text:000000000040053A                 retn
.text:000000000040053A ; } // starts at 400526
.text:000000000040053A main            endp
.text:0000000000400526 main            proc near               ; DATA XREF: _start+1D↑o
.text:0000000000400526 ; __unwind {
.text:0000000000400526                 push    rbp
.text:0000000000400527                 mov     rbp, rsp
.text:000000000040052A                 mov     edi, offset s   ; "Hello World!"
.text:000000000040052F                 call    _puts
.text:0000000000400534                 mov     eax, 0
.text:0000000000400539                 pop     rbp
.text:000000000040053A                 retn
.text:000000000040053A ; } // starts at 400526
.text:000000000040053A main            endp

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//