I understand the difference between static and dynamic linking, but is it possible by using IDA Pro, Ollydbg, or any other reversing tools to determine if an executable was dynamically or statically linked?


There is no sharp difference between dynamically linked and statically linked, since it's always possible to link some libraries dynamically, and others statically, in the same binary.

For example, an application i hacked reversed parts of recently (android, in this case, but only a thin java wrapper to a large binary) had over 20 open source libraries compiled into the binary, but still dynamically linked libc and a few other standard libs.

So a better question would be "(How) can i determine if an application uses dynamic libraries at all, and if so, which ones?"

On Linux, the ldd programm tells you about this:

$ 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

On Windows, use Dependency Walker:

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.