您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 >
04 ss訂閱鏈接轉換網站(請教一下,什么叫電子書)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-07-21 01:00:28【】9人已围观
简介0)/lib/ld-linux.so.2=>/lib/ld-linux.so.2(0x40000000)這個所謂的"linux-gate.so.1"的內容就是內核映射的代碼,
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
這個所謂的"linux-gate.so.1"的內容就是內核映射的代碼,系統中其實并不存在這樣一個鏈接庫文件,它的名字是由ldd自己起的,而在老版本的ldd中,雖然能夠檢測到這段代碼,但是由于沒有命名而且在系統中找不到對應鏈接庫文件,所以會有一些顯示上的問題。有關這個問題的背景,可以參考下面這個買粉絲: 買粉絲://sources.redhat.買粉絲/ml/libc-alpha/2003-09/msg00263.買粉絲。
由用戶態經庫函數進入內核態
為了配合內核使用新的系統調用方式,glibc中要做一定的修改。新的glibc-2.3.2(及其以后版本中)中已經包含了這個改動,在glibc源代碼的sysdeps/unix/sysv/linux/i386/sysdep.h文件中,處理系統調用的宏INTERNAL_SYSCALL在不同的編譯選項下有不同的結果。在打開支持sysenter/sysexit指令的選項I386_USE_SYSENTER下,系統調用會有兩種方式,在靜態鏈接(編譯時加上-static選項)情況下,采用"call *_dl_sysinfo"指令;在動態鏈接情況下,采用"call *%gs:0x10"指令。這兩種情況由glibc庫采用哪種方法鏈接,實際上最終都相當于調用某個固定地址的代碼。下面我們通過一個小小的程序,配合 gdb來驗證。
首先是一個靜態編譯的程序,代碼很簡單:
main()
{
getuid();
}
將代碼加上static選項用gcc靜態編譯,然后用gdb裝載并反編譯main函數。
[root@test opt]# gcc test.c -o ./static -static
[root@test opt]# gdb ./static
(gdb) disassemble main
0x08048204 <main+0>: push %ebp
0x08048205 <main+1>: mov %esp,%ebp
0x08048207 <main+3>: sub $0x8,%esp
0x0804820a <main+6>: and $0xfffffff0,%esp
0x0804820d <main+9>: mov $0x0,%eax
0x08048212 <main+14>: sub %eax,%esp
0x08048214 <main+16>: call 0x804cb20 <__getuid>
0x08048219 <main+21>: leave
0x0804821a <main+22>: ret
可以看出,main函數中調用了__getuid函數,接著反編譯__getuid函數。
(gdb) disassemble 0x804cb20
0x0804cb20 <__getuid+0>: push %ebp
0x0804cb21 <__getuid+1>: mov 0x80aa028,%eax
0x0804cb26 <__getuid+6>: mov %esp,%ebp
0x0804cb28 <__getuid+8>: test %eax,%eax
0x0804cb2a <__getuid+10>: jle 0x804cb40 <__getuid+32>
0x0804cb2c <__getuid+12>: mov $0x18,%eax
0x0804cb31 <__getuid+17>: call *0x80aa054
0x0804cb37 <__getuid+23>: pop %ebp
0x0804cb38 <__getuid+24>: ret
上面只是__getuid函數的一部分。可以看到__getuid將eax寄存器賦值為getuid系統調用的功能號0x18然后調用了另一個函數,這個函數的入口在哪里呢?接著查看位于地址0x80aa054的值。
(gdb) X 0x80aa054
0x80aa054 <_dl_sysinfo>: 0x0804d7f6
看起來不像是指向內核映射頁面內的代碼,但是,可以確認,__dl_sysinfo指針的指向的地址就是0x80aa054。下面,我們試著啟動這個程序,然后停在程序第一條語句,再查看這個地方的值。
(gdb) b main
Breakpoint 1 at 0x804820a
(gdb) r
Starting program: /opt/static
Breakpoint 1, 0x0804820a in main ()
(gdb) X 0x80aa054
0x80aa054 <_dl_sysinfo>: 0xffffe400
可以看到,_dl_sysinfo指針指向的數值已經發生了變化,指向了0xffffe400,如果我們繼續運行程序,__getuid函數將會調用地址0xffffe400處的代碼。
接下來,我們將上面的代碼編譯成動態鏈接的方式,即默認方式,用gdb裝載并反編譯main函數
[root@test opt]# gcc test.c -o ./dynamic
[root@test opt]# gdb ./dynamic
(gdb) disassemble main
0x08048204 <main+0>: push %ebp
0x08048205 <main+1>: mov %esp,%ebp
0x08048207 <main+3>: sub $0x8,%esp
0x0804820a <main+6>: and $0xfffffff0,%esp
0x0804820d <main+9>: mov $0x0,%eax
0x08048212 <main+14>: sub %eax,%esp
0x08048214 <main+16>: call 0x8048288
0x08048219 <main+21>: leave
0x0804821a <main+22>: ret
由于libc庫是在程序初始化時才被裝載,所以我們先啟動程序,并停在main第一條語句,然后反匯編getuid庫函數
。
(gdb) b main
Breakpoint 1 at 0x804820a
(gdb) r
Starting program: /opt/dynamic
Breakpoint 1, 0x0804820a in main ()
(gdb) disassemble getuid
Dump of assembler 買粉絲de for function getuid:
0x40219e50 <__getuid+0>: push %ebp
0x40219e51 <__getuid+1>: mov %esp,%ebp
0x40219e53 <__getuid+3>: push %ebx
0x40219e54 <__getuid+4>: call 0x40219e59 <__getuid+9>
0x40219e59 <__getuid+9>: pop %ebx
0x40219e5a <__getuid+10>: add $0x84b0f,%ebx
0x40219e60 <__getuid+16>: mov 0xffffd87c(%ebx),%eax
0x40219e66 <__getuid+22>: test %eax,%eax
0x40219e68 <__getuid+24>: jle 0x40219e80 <__getuid+48>
0x40219e6a <__getuid+26>: mov $0x18,%eax
0x40219e6f <__getuid+31>: call *%gs:0x10
0x40219e76 <__getuid+38>: pop %ebx
0x40219e77 <__getuid+39>: pop %ebp
0x40219e78 <__getuid+40>: ret
可以看出,庫函數getuid將eax寄存器設置為getuid系統調用的調用號0x18,然后調用%gs:0x10所指向的函數。在gdb中,無法查看非DS段的數據內容,所以無法查看%gs:0x10所保存的實際數值,不過我們可以通過編程的辦法,內嵌匯編將%gs:0x10的值賦予某個局部變量來得到這個數值,而這個數值也是0xffffe400,具體代碼這里就不再贅述。
由此可見,無論是靜態還是動態方式,最終我們都來到了0xffffe400這里的一段代碼,這里就是內核為我們映射的系統調用入口代碼。在gdb中,我們可以直接反匯編來查看這里的代碼
(gdb) disassemble 0xffffe400 0xffffe414
Dump of assembler 買粉絲de from 0xffffe400 to 0xffffe414:0xffffe400: push %ecx
0xffffe401: push %edx
很赞哦!(44889)
相关文章
- 06 youtube to mp3 買粉絲 software是什么文件能(P2P是什么意思??)
- 06 youtube to mp3 買粉絲 app下載(2007年影響人類生活的十大IT產品)
- 01 河北省人民醫院買粉絲買粉絲二維碼(怎樣獲取人民醫院買粉絲買粉絲?)
- 01 河北省四院買粉絲預約總是加載中(明明在住院,為什么哈醫大四院買粉絲怎么顯示沒有住院記錄呢?)
- 06 youtube to mp3 買粉絲 app(2007年影響人類生活的十大IT產品)
- 06 youtube to mp3 買粉絲nverter download online youtube 買粉絲 downloader 買粉絲(介紹幾個經典的音樂網站啊)
- 06 youtube my playlist songs(誰給推薦一些好聽的歌??謝謝啦~)
- 01 河北經貿大學國際經濟與貿易專業分數線(河北經貿大學國際教育學院分數線)
- 01 河北玖色云貿易有限公司(招標信息在哪查看?)
- 06 youtube my mix music 買粉絲 from movie star(杰西麥卡特尼Jesse McCartney 資料)
热门文章
站长推荐
01 河北澤和汽車貿易有限公司(邳州景澤興業汽車貿易有限公司怎么樣?)
01 河北省人民醫院買粉絲買粉絲下載安裝(買粉絲買粉絲怎么綁定醫院就診卡?)
06 youtube to mp3 買粉絲 online 買粉絲nverter mp3 youtube 買粉絲(如何安裝Free Video to Flash Converter)
06 youtube to mp3 買粉絲 download hindi songs download mp3 telugu(尋一個聽歌的網站)
06 youtube music player android app(安卓手機root后怎么刪除軟件圖文詳細教程)
06 youtube to mp3 買粉絲 software是什么可以聯系(P2P是什么意?)
01 河北省商務廳對外貿易處處長(上世紀中國電影界被戲稱為(五大壞蛋)的五位電影演員的詳細信息?)
01 河北省四院買粉絲怎么退款(電子就診卡余額怎么退)