Glibc
相同 libc 版本的不同函式偏移量
這是一個 pwnage 挑戰。我有兩個虛擬機。兩者都在執行 glibc 2.19。但是,當我分析兩者中的函式偏移量時,它們都不同。
據我所知,相同版本的 libc 具有相同的偏移量。我在網上搜尋,但沒有找到任何令人信服的解決方案。以下是兩台機器的詳細資訊:
機器1:
~$ objdump -d /lib/i386-linux-gnu/libc.so.6 | grep system 00040190 <__libc_system>: ~$ objdump -d /lib/i386-linux-gnu/libc.so.6 | grep "IO_puts>" 00065650 <_IO_puts>: ~$ ls -la /lib/i386-linux-gnu/libc.so.6 lrwxrwxrwx 1 root root 12 Jan 9 04:28 /lib/i386-linux-gnu/libc.so.6 -> libc-2.19.so ~$ readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system 620: 00040190 56 FUNC GLOBAL DEFAULT 12 __libc_system@@GLIBC_PRIVATE ~$ readelf -s /lib/i386-linux-gnu/libc.so.6 | grep IO_puts 203: 00065650 421 FUNC GLOBAL DEFAULT 12 _IO_puts@@GLIBC_2.0 ~$ ls -l /lib/i386-linux-gnu/libc-2.19.so -rwxr-xr-x 1 root root 1754876 May 26 2016 /lib/i386-linux-gnu/libc-2.19.so
機器2:
~$ objdump -d /lib/i386-linux-gnu/libc.so.6 | grep system 00040310 <__libc_system>: ~$ objdump -d /lib/i386-linux-gnu/libc.so.6 | grep "IO_puts>" 000657e0 <_IO_puts>: ~$ ls -la /lib/i386-linux-gnu/libc.so.6 lrwxrwxrwx 1 root root 12 Jan 9 04:28 /lib/i386-linux-gnu/libc.so.6 -> libc-2.19.so ~$ readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system 620: 00040310 56 FUNC GLOBAL DEFAULT 12 __libc_system@@GLIBC_PRIVATE ~$ readelf -s /lib/i386-linux-gnu/libc.so.6 | grep IO_puts 203: 000657e0 421 FUNC GLOBAL DEFAULT 12 _IO_puts@@GLIBC_2.0 ~$ ls -l /lib/i386-linux-gnu/libc-2.19.so -rwxr-xr-x 1 root root 1754876 Feb 25 2015 /lib/i386-linux-gnu/libc-2.19.so
這裡的任何見解將不勝感激。謝謝!
相同版本的 libc 具有相同的偏移量
關閉,但不完全。如果由相同的編譯器、使用相同的優化常式、針對相同的平台、使用相同的指令集擴展規則編譯,則任何庫的相同版本**可能具有相同的偏移量。**因此,例如,如果一個作業系統維護者使用 gcc 5.4 版編譯 libc,另一個使用 gcc 6.3 版,另一個使用 clang,則完全有可能沒有偏移量匹配。
由於共享對象 (.so) 是動態連結的與位置無關的程式碼,因此在底層沒有區別:從已連結的庫中呼叫的函式應該按預期執行。
另一方面,如果您在具有相同 CPU 配置的 2 台虛擬機上安裝了來自相同儲存庫的預建構 libc,那麼我會說它需要進一步調查。