Linux

找出 glibc 編譯選項

  • September 25, 2015

我想知道在安裝 Linux 時使用了哪些編譯器/連結器選項來編譯 GNU C 標準庫 (glibc)。特別是,我想在另一台機器上從原始碼編譯 glibc 時獲得與歸檔 libc.a 相同的結果(儘管是相同版本的 gcc、make、binutils 等)。

我所能找到的只是使用的 gcc 版本:

user@ubuntu:/$ /lib/x86_64-linux-gnu/libc.so.6 
GNU C Library (Ubuntu GLIBC 2.21-0ubuntu4) stable release version 2.21,
...
Compiled by GNU CC version 4.9.2.
...

但是當從原始碼編譯 glibc 時沒有其他選項時,執行 make 後我沒有得到相同的結果。自編譯libc.a存檔不同於預安裝的存檔(大小和二進制)。所以我想有一些優化正在進行中。可能是因為從原始碼編譯時包含了調試資訊。

建造:

user@ubuntu:~/glibc$ sudo apt-get source libc6
user@ubuntu:~/glibc/glibc-build$ sudo ../glibc-2.21/configure --prefix=/home/user/glibc/glibc-install/
...
sudo make
...

在 debian/rules 文件和我找到的輸出中,它-O2-ggcc 一起使用。

有一個現有的問題,我看過但沒有幫助我。

我目前使用的是 Ubuntu 15.04,但我在其他(非 debian)系統上也需要它。此外,它還應該在 Ubuntu 14.04 上與 eglibc 一起使用。


最終目標是重現(編譯)在不同系統上使用的每個版本的 glibc(我知道這很多)並從中製作 IDA PRO FLIRT 簽名。所以,總而言之,我至少需要相同的二進制輸出libc.a(這是製作簽名的文件)。在此處進一步閱讀 FLIRT 簽名。

這些簽名的問題是,每個不同的編譯器版本和每個編譯器選項都可以更改庫存檔的輸出並導致不同的簽名,該簽名只能部分適用於分析的二進製文件。

我是新手,所以歡迎每一個幫助。我希望我沒有忘記提及一些重要的事情。

您應該在與您的包匹配的 src.deb 包中找到需要重建的所有內容.deb。看apt-src(8)

引用自:https://unix.stackexchange.com/questions/232039