您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 >
04 ss訂閱鏈接如何使用(vmess如何轉換)
Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-07-05 11:00:27【】4人已围观
简介libc.so.6=>/lib/tls/libc.so.6(0x4002c000)/lib/ld-linux.so.2=>/lib/ld-linux.so.2(0x40000000)這個所
/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:0xffffe40
很赞哦!(992)
相关文章
- 01 廣州市一山汽配貿易有限公司招聘信息(廣州市一山汽配貿易有限公司怎么樣?)
- 01 廣州威川貿易有限公司怎么樣(()應()合 徒()無() 取()補() ()入()出 ()假()威 川()不()成語填寫)
- 01 youtube music 買粉絲 買粉絲untry songs(尋一個聽歌的網站)
- 01 廣州市對外貿易發展公司(公司介紹)
- 01 廣州大學vs廣東外語外貿大學(廣州大學與廣東外語外貿大學哪個好)
- 01 youtube music 買粉絲 3 months(今日新聞淺談:Youtube Music 也加入串流音樂服務大混戰)
- 01 youtube music downloader app for pc是電腦(為什么Chrome Youtube Downloader 2.6.20不能下載帶音頻的視頻)
- 01 廣州外貿賬戶大面積被凍結(外貿行業收客戶貨款銀行卡被凍結該怎么辦?)
- 01 廣州寶祺來貿易有限公司佛山分公司(廣州寶祺來貿易有限公司東莞分公司怎么樣?)
- 01 廣州尚美進出口貿易有限公司(十大珠寶品牌)
热门文章
站长推荐
01 youtube music 買粉絲 download music from spotify(流行英文歌曲(熱門單曲推薦))
01 youtube music 買粉絲 alternative(drm是什么意思 drm的中文翻譯、讀音、例句?)
01 廣州市利德丹貿易有限公司賣斯凱奇是假貨嗎(廣州市斯凱奇商業有限公司是正品嗎)
01 廣州對外貿易源遠流長被稱為是(廣州對外貿易源遠流長是我國古代海上絲綢之路的發祥地)
01 廣州安驊汽車貿易有限公司是4s店(鐵將軍汽車防盜器)
01 廣州外貿服裝公司排名榜(廣州外貿服裝批發市場在哪里?)
01 廣州小泰郎貿易有限公司(小泰郎榴蓮總部店在哪里)
01 youtube music 買粉絲 download apk 2023 latest(今日新聞淺談:Youtube Music 也加入串流音樂服務大混戰)