亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

覆蓋GNU C庫

2019-11-17 05:14:33
字體:
來源:轉載
供稿:網友

  2002 年 4 月
一種調試 glibc 函數的好方法是用您自己的版本覆蓋所關注的函數。在沒有 root 許可權和不必重新編譯 libc 源代碼的情況下就可以完成這個任務。想象一下編寫您自己的 open() 版本該有多激動??!

假如您沒有應用程序的源代碼并且由于 C 的 GNU 庫(glibc)函數正將某些錯誤信息返回給該應用程序而使它失敗,那么您該怎么辦? 因為 glibc 是開放源碼,所以您當然可以獲得其源代碼、對它進行更改、重新構建和安裝。 然而,這不適合那些膽怯的人,因為雖然 API 有很好的文檔說明,但 GNU C 庫的內部組織卻沒有。 查找正確的函數原型只是眾多挑戰中的第一個。 它還是一個很大的包,所以第一次編譯時,它將花一些時間(glibc 2.2.2 有 8552 個文件和 1775440 行代碼,包括注釋)。

更好的方法
比重新構建 glibc 更好的方法是選擇性地覆蓋一個函數。許多現代的 Unix 都支持預裝入用戶定義庫這一概念。 這些庫可以是完整的替代(即,glibc 的專用版本)也可以是子集 — 甚至是一個函數。 首先,通過設置 LD_LIBRARY_PATH 來包含庫的專用版本,您可以使用 glibc 的專用 版本??赏ㄟ^使用 LD_PRELOAD 環境值來使用您編寫的庫例程的子集。LD_LIBRARY_PATH 和 LD_PRELOAD 都是由動態 ELF 鏈接器/裝入器控制的。 它使用第一個匹配來滿足任何符號名。通過預裝入您自己的庫或函數版本,您“短路”了正常路徑,這樣就答應您覆蓋它。

這里是一個示例 makefile,它覆蓋 glibc 函數 setresgid():
覆蓋 setresgid() 的 Makefile


#
# Makefile
#

all: libs setresgid-tester

#
# Make a shared Library
#
libs: libfuncs.c
gcc -shared -Wl,-soname,libfuncs.so.1 -o libfuncs.so.1.0 libfuncs.c
ln -s libfuncs.so.1.0 libfuncs.so.1
ln -s libfuncs.so.1 libfuncs.so

#
# Here is a program that calls setresgid() for testing
#
setresgid-tester: setresgid-tester.c
gcc -o setresgid-tester setresgid-tester.c

文件 libfuncs.c 包含我的 setresgid() 專用版本。 實現它以支持與原始 setresgid() 相同的參數數目時要小心,并在其它方面完成與原始 setresgid() 相同的操作,盡管我的版本欺騙該應用程序并始終返回 0。

關注的第二個文件是 setresgid-tester.c。它通過調用 setresgid() 試驗新函數。

這是動態庫的源代碼:
替換庫


/*
Put all the functions you want to override here
*/
#include
#include
#include

int errno;

int
setresgid(rgid, egid, sgid)
gid_t rgid,egid,sgid;
{
errno=1;
printf("It me the shim, Hi there!
");
return(0);

}

您還需要一個簡單方法來測試您的 setresgid() 專用版本??梢允褂?strace 或 ltrace 來監視進程運行。這是普通測試示例的源代碼:
普通測試示例


/*
setresgid() system/library call tester
*/
#include
#include
main(){
setresgid(0,0,0);
}

現在,編譯該庫,設置 LD_PRELOAD shell 變量,然后運行測試應用程序。您可能還需要設置 LD_LIBRARY_PATH。
運行測試應用程序


eXPort LD_PRELOAD=libfuncs.so
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./setresgid-tester
It's me the shim, Hi there!

還可以通過使用 ldd 列出動態鏈接庫來確認是否正在使用專用庫:
確認專用庫的使用


[jay@prion ld_preload]$ ldd setresgid-tester
libfuncs.so => libfuncs.so (0x40018000)
libc.so.6 => /lib/libc.so.6 (0x40022000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)


結束語
編寫 GNU C 庫函數的專用版本是調試系統問題或進行快速修正的好方法。 使用 LD_PRELOAD shell 變量,可以選擇性地用您自己的專用版本來覆蓋系 統 C 庫函數。這種技術可用于 linux 和 Solaris 環境。
關于作者
Jay Allen 是 IBM linux for Service Providers Lab(LSPL)的程序員??梢酝ㄟ^ jaydallen@us.ibm.com 與 Jay 聯系。


到頁首
您對這篇文章的看法如何?
真棒!(5) 好文章 (4) 一般;尚可 (3) 需提高 (2) 太差! (1)

意見?


(c) Copyright IBM Corp. 2001, (c) Copyright IBM China 2001, All Right Reserved
關于 IBM 隱私條約 法律條款 聯系 IBM

上一篇:gdb基本用法

下一篇:守護進程的創建

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成人亚洲激情| 最近2019中文字幕一页二页| 午夜剧场成人观在线视频免费观看| 亚洲sss综合天堂久久| 欧美亚洲国产精品| 91亚洲va在线va天堂va国| 欧美日韩中文字幕在线视频| 久久亚洲春色中文字幕| 日韩色av导航| 国产区精品视频| 久久精品国产99国产精品澳门| 欧美黑人又粗大| 亚洲精品美女在线| 亚洲一区二区三区香蕉| 国产一区二区黄| 国产精品成熟老女人| 57pao成人永久免费视频| 国模gogo一区二区大胆私拍| 亚洲tv在线观看| 国产91成人video| 亚洲无线码在线一区观看| 97超碰蝌蚪网人人做人人爽| 国产视频久久网| 亚洲美女中文字幕| 一区二区福利视频| 国产精品免费一区| 亚洲综合自拍一区| 黑人精品xxx一区一二区| 国产成人精品久久久| 亚洲成人教育av| 亚洲第一精品久久忘忧草社区| 国模精品视频一区二区| 国产91精品视频在线观看| 中文字幕在线视频日韩| 久久久久久久av| 亚洲欧美在线免费观看| 亚洲天堂av电影| 亚洲欧美日韩精品久久| 日韩黄在线观看| 欧美黑人又粗大| 在线亚洲午夜片av大片| 亚洲剧情一区二区| 国产suv精品一区二区| 在线电影欧美日韩一区二区私密| 国产精品一区二区三| 91天堂在线观看| 日韩精品视频免费在线观看| 成人在线一区二区| 激情亚洲一区二区三区四区| 日韩美女写真福利在线观看| 精品视频9999| 日韩在线中文视频| 国产亚洲一区精品| 国内精品免费午夜毛片| www.日韩视频| 狠狠爱在线视频一区| 国内精品视频一区| www.久久色.com| 欧美黑人性猛交| 91久久久久久久久久久| 91精品久久久久久久久久久| 国产婷婷成人久久av免费高清| 国产精品久久久久99| 国产女同一区二区| 国产婷婷成人久久av免费高清| 日韩欧美一区视频| 亚洲福利在线播放| 亚洲天堂av综合网| 欧美亚洲另类激情另类| 色无极亚洲影院| 国产午夜精品一区理论片飘花| 国产精品亚洲一区二区三区| 亚洲乱码国产乱码精品精| 国产美女精品免费电影| 久久久亚洲网站| 亚洲香蕉伊综合在人在线视看| 日韩在线播放一区| 亚洲自拍av在线| 国产精品羞羞答答| 最新69国产成人精品视频免费| 欧美精品久久久久a| 91在线|亚洲| 久久精品国产成人| 亚洲色图校园春色| 亚洲美女黄色片| 国产欧美va欧美va香蕉在线| 亚洲综合在线小说| 日韩av一区在线| 国产精品av免费在线观看| 欧美肥婆姓交大片| 国产精品揄拍500视频| 欧美日本精品在线| 日韩av免费观影| 欧美久久精品午夜青青大伊人| 国产精品白丝jk喷水视频一区| 色偷偷亚洲男人天堂| 国产亚洲欧美日韩精品| 影音先锋日韩有码| 91av福利视频| 亚洲一区美女视频在线观看免费| 中文精品99久久国产香蕉| 久久久欧美一区二区| 国产aaa精品| 国内外成人免费激情在线视频网站| 国产suv精品一区二区| 日产精品久久久一区二区福利| 奇门遁甲1982国语版免费观看高清| 日韩成人免费视频| 日韩在线小视频| 国产日产欧美精品| 成人a视频在线观看| 青青草成人在线| 亚洲一区亚洲二区| 久久激情视频久久| 中文字幕精品国产| 91精品久久久久久久久久久久久久| 色无极亚洲影院| 欧美在线视频一区二区| 综合网中文字幕| 久久精品中文字幕电影| 亚洲欧洲日产国码av系列天堂| 在线观看亚洲视频| 国产精品网址在线| 国产精品日日摸夜夜添夜夜av| 日韩欧亚中文在线| 亚洲人精品午夜在线观看| 欧美成人免费全部观看天天性色| 国产精品男人爽免费视频1| 久久九九亚洲综合| 久久综合88中文色鬼| 欧美成人午夜免费视在线看片| 国产91在线播放精品91| 91精品国产高清久久久久久91| 国产精品高精视频免费| 成年人精品视频| 91国内产香蕉| 亚洲精品99久久久久中文字幕| 久色乳综合思思在线视频| 久久精品视频va| 久久影视电视剧凤归四时歌| 国产精品大片wwwwww| 国产精品一区二区久久久| 91精品国产99| 亚洲成色777777在线观看影院| 日韩精品极品在线观看播放免费视频| 亚洲国产精品视频在线观看| 久久精品国产96久久久香蕉| 北条麻妃一区二区三区中文字幕| 国产亚洲精品美女| 在线视频欧美性高潮| 中文字幕在线亚洲| 国产欧美日韩免费看aⅴ视频| 成人免费视频网| 精品一区二区亚洲| 九九精品视频在线| 久久成人综合视频| 国产男人精品视频| 亚洲国产精品电影在线观看| 欧美在线观看网址综合| 中文一区二区视频| 亚洲天堂开心观看| 日韩亚洲第一页| 亚洲男人天堂视频| 日韩视频欧美视频|