2009年11月6日 星期五

在Linux環境中,如何比較兩個Binary File?

我們在發展程式的過程中,難免會遇到資料處理的流程,在資料處理的流程中,也許我們需要進行資料正確與否的驗証,驗証的方法當然很多,其中我們可以將記憶體中的資料抓出來,再進行比對,在Linux環境中,可以使用下列的方式進行Binary File的比對:

hexdump -C file1 > file1.txt
hexdump -C file2 > file2.txt

diff file1.txt file2.txt -y |less

2009年11月3日 星期二

如何了解執行程式使用了哪些Shared Library

一般使用者如果想了解執行程式是Static?還是Dynamic Linking,只要使用file指令即可達到此目的,如:

$ file gdb
gdb: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, statically linked, not stripped

$file gdb
gdb: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped

但如果您想要知道執行程式使用了哪些Shared Library,就需要使用ldd指令,如:

$ ldd gdb
not a dynamic executable

$ ldd gdb
libncurses.so.5 => /usr/lib/libncurses.so.5 (0x002c9000)
libm.so.6 => /lib/tls/libm.so.6 (0x005fd000)
libexpat.so.0 => /usr/lib/libexpat.so.0 (0x007e6000)
libc.so.6 => /lib/tls/libc.so.6 (0x004cf000)
/lib/ld-linux.so.2 (0x004b0000)