动态 v. 静态链接

逆向工程 动态链接
2021-07-02 08:04:55

我了解静态和动态链接之间的区别,但是否可以使用 IDA Pro、Ollydbg 或任何其他反向工具来确定可执行文件是动态链接还是静态链接?

1个回答

动态链接和静态链接之间没有明显区别,因为总是可以在同一个二进制文件中动态链接某些库,而静态链接其他库。

例如,一个应用程序我 被黑了 最近的反向部分(在这种情况下是 android,但只是对大型二进制文件的一个瘦 Java 包装器)将 20 多个开源库编译到二进制文件中,但仍然动态链接 libc 和一些其他标准库。

所以一个更好的问题是“(如何)我可以确定一个应用程序是否使用了动态库,如果使用了,是哪些?”

在 Linux 上,ldd程序会告诉你这个:

$ ldd /bin/ls
    linux-vdso.so.1 =>  (0x00007ffd14798000)
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f40fd591000)
    libacl.so.1 => /lib/x86_64-linux-gnu/libacl.so.1 (0x00007f40fd389000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f40fcfc4000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f40fcd86000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f40fcb82000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f40fd7b4000)
    libattr.so.1 => /lib/x86_64-linux-gnu/libattr.so.1 (0x00007f40fc97d000

在 Windows 上,使用Dependency Walker

在此处输入图片说明