簡析Linux與FreeBSD的syscall(轉)
簡析Linux與FreeBSD的syscall(轉)[@more@] --]概述
又是一個不眠的夜晚,其實這篇文件是不應該發表的,因為保密的原則吧,但是我仔細
google了下,沒有類似的文章,而且發表的這部分文件也不至於被認為是什麼絕密資料,
但是我還是隱藏了很多發現的核心級別可能存在的問題:)單純從彙編程式碼的結構來闡述
下linux與freebsd到底那個更好玩一些.或者說那個執行速度會更快一些:)
我想大家看完這個文件以後,或許會知道到底是Linux穩固?還是FreeBSD穩固?
在本文的最後部分,附加了shellcode的問題,但沒有專門的論述.
備註:本文觀點僅代表個人觀點,如有不對的地方,歡迎大家指正:)以提高本人的水平.
--]編譯除錯
A:編譯選項
Linux :gcc -gdwarf-2 ***.c -o ***
FreeBSD: cc -gdwarf-2 ***.c -o ***
為了除錯方便,我使用了上面的選項.
--------------------------------------
對於一般書寫shellcode的編譯選項一般為:
Linux :gcc -static -o *** ***.c
FreeBSD: cc -static -o *** ***.c
B:除錯工具
Linux/Unix下面的除錯工具為GDB,但是GDB基於核心的除錯有些力不從心,因為GDB的除錯是
基於使用者模式(User mode).
這裡我使用了其它的除錯工具,所以下面大家看到的除錯程式碼比較特殊,在這裡事先宣告.
--]Linux的syscall跟蹤
寫過shellcode的人都知道syscall是寫shellcode的必需品:)當然這種概念只在Linux/Unix
的OS下才存在.最近這段時間因為一個"小小的問題"對Linux核心與FreeBSD的核心級別進行了
跟蹤和除錯,然後發現一個蠻有意思的問題,自己感覺這個問題可能會與Linux下shellcode與
FreeBSD下shellcode的不同有關係,當然也和系統架構存在一些細微的關係.下面的內容是Linux
下面syscall的一些彙編程式碼.
在Linux下面,Application呼叫syscall的程式碼如下:
420D4330 55 PUSH EBP |
420D4331 89E5 MOV EBP,ESP |->堆疊框架
420D4333 83EC18 SUB ESP,00000018 |
420D4336 897DFC MOV dword ptr [EBP]-04,EDI |
420D4339 8B4D0C MOV ECX,dword ptr [EBP]+0c |
420D433C 8B7D08 MOV EDI,dword ptr [EBP]+08 |->syscall引數
420D433F 8975F8 MOV dword ptr [EBP]-08,ESI |
420D4342 8B5510 MOV EDX,dword ptr [EBP]+10 |
420D4345 895DF4 MOV dword ptr [EBP]-0c,EBX
420D4348 E81014F4FF CALL near32 ptr 4201575d
420D434D 81C3835F0500 ADD EBX,00055f83
420D4353 8D77FF LEA ESI,dword ptr [EDI]-01
420D4356 83FE02 CMP ESI,00000002
420D4359 8D75F0 LEA ESI,dword ptr [EBP]-10
420D435C 0F477514 CMOVA ESI,dword ptr [EBP]+14
420D4360 53 PUSH EBX
420D4361 89FB MOV EBX,EDI
420D4363 B81A000000 MOV EAX,0000001c //system call number value
420D4368 CD80 INT 80 //呼叫0x80
420D436A 5B POP EBX
420D436B 3D00F0FFFF CMP EAX,fffff000
420D4370 89C6 MOV ESI,EAX
420D4372 760E JBE short ptr 420d4382
420D4374 F7DE NEG ESI
420D4376 E8C912F4FF CALL near32 ptr 42015644
420D437B 8930 MOV dword ptr [EAX],ESI
420D437D BEFFFFFFFF MOV ESI,ffffffff
420D4382 85F6 TEST ESI,ESI
420D4384 782A JS short ptr 420d43b0
420D4386 85FF TEST EDI,EDI
420D4388 7426 JE short ptr 420d43b0
420D438A 83FF03 CMP EDI,00000003
420D438D 7721 JA short ptr 420d43b0
420D438F E8B012F4FF CALL near32 ptr 42015644
420D4394 C70000000000 MOV dword ptr [EAX],00000000
420D439A 8B45F0 MOV EAX,dword ptr [EBP]-10
420D439D 8B5DF4 MOV EBX,dword ptr [EBP]-0c
420D43A0 8B75F8 MOV ESI,dword ptr [EBP]-08
420D43A3 8B7DFC MOV EDI,dword ptr [EBP]-04
420D43A6 89EC MOV ESP,EBP
420D43A8 5D POP EBP
420D43A9 C3 RETN
---------------------------------------------------------------------
又是一個不眠的夜晚,其實這篇文件是不應該發表的,因為保密的原則吧,但是我仔細
google了下,沒有類似的文章,而且發表的這部分文件也不至於被認為是什麼絕密資料,
但是我還是隱藏了很多發現的核心級別可能存在的問題:)單純從彙編程式碼的結構來闡述
下linux與freebsd到底那個更好玩一些.或者說那個執行速度會更快一些:)
我想大家看完這個文件以後,或許會知道到底是Linux穩固?還是FreeBSD穩固?
在本文的最後部分,附加了shellcode的問題,但沒有專門的論述.
備註:本文觀點僅代表個人觀點,如有不對的地方,歡迎大家指正:)以提高本人的水平.
--]編譯除錯
A:編譯選項
Linux :gcc -gdwarf-2 ***.c -o ***
FreeBSD: cc -gdwarf-2 ***.c -o ***
為了除錯方便,我使用了上面的選項.
--------------------------------------
對於一般書寫shellcode的編譯選項一般為:
Linux :gcc -static -o *** ***.c
FreeBSD: cc -static -o *** ***.c
B:除錯工具
Linux/Unix下面的除錯工具為GDB,但是GDB基於核心的除錯有些力不從心,因為GDB的除錯是
基於使用者模式(User mode).
這裡我使用了其它的除錯工具,所以下面大家看到的除錯程式碼比較特殊,在這裡事先宣告.
--]Linux的syscall跟蹤
寫過shellcode的人都知道syscall是寫shellcode的必需品:)當然這種概念只在Linux/Unix
的OS下才存在.最近這段時間因為一個"小小的問題"對Linux核心與FreeBSD的核心級別進行了
跟蹤和除錯,然後發現一個蠻有意思的問題,自己感覺這個問題可能會與Linux下shellcode與
FreeBSD下shellcode的不同有關係,當然也和系統架構存在一些細微的關係.下面的內容是Linux
下面syscall的一些彙編程式碼.
在Linux下面,Application呼叫syscall的程式碼如下:
420D4330 55 PUSH EBP |
420D4331 89E5 MOV EBP,ESP |->堆疊框架
420D4333 83EC18 SUB ESP,00000018 |
420D4336 897DFC MOV dword ptr [EBP]-04,EDI |
420D4339 8B4D0C MOV ECX,dword ptr [EBP]+0c |
420D433C 8B7D08 MOV EDI,dword ptr [EBP]+08 |->syscall引數
420D433F 8975F8 MOV dword ptr [EBP]-08,ESI |
420D4342 8B5510 MOV EDX,dword ptr [EBP]+10 |
420D4345 895DF4 MOV dword ptr [EBP]-0c,EBX
420D4348 E81014F4FF CALL near32 ptr 4201575d
420D434D 81C3835F0500 ADD EBX,00055f83
420D4353 8D77FF LEA ESI,dword ptr [EDI]-01
420D4356 83FE02 CMP ESI,00000002
420D4359 8D75F0 LEA ESI,dword ptr [EBP]-10
420D435C 0F477514 CMOVA ESI,dword ptr [EBP]+14
420D4360 53 PUSH EBX
420D4361 89FB MOV EBX,EDI
420D4363 B81A000000 MOV EAX,0000001c //system call number value
420D4368 CD80 INT 80 //呼叫0x80
420D436A 5B POP EBX
420D436B 3D00F0FFFF CMP EAX,fffff000
420D4370 89C6 MOV ESI,EAX
420D4372 760E JBE short ptr 420d4382
420D4374 F7DE NEG ESI
420D4376 E8C912F4FF CALL near32 ptr 42015644
420D437B 8930 MOV dword ptr [EAX],ESI
420D437D BEFFFFFFFF MOV ESI,ffffffff
420D4382 85F6 TEST ESI,ESI
420D4384 782A JS short ptr 420d43b0
420D4386 85FF TEST EDI,EDI
420D4388 7426 JE short ptr 420d43b0
420D438A 83FF03 CMP EDI,00000003
420D438D 7721 JA short ptr 420d43b0
420D438F E8B012F4FF CALL near32 ptr 42015644
420D4394 C70000000000 MOV dword ptr [EAX],00000000
420D439A 8B45F0 MOV EAX,dword ptr [EBP]-10
420D439D 8B5DF4 MOV EBX,dword ptr [EBP]-0c
420D43A0 8B75F8 MOV ESI,dword ptr [EBP]-08
420D43A3 8B7DFC MOV EDI,dword ptr [EBP]-04
420D43A6 89EC MOV ESP,EBP
420D43A8 5D POP EBP
420D43A9 C3 RETN
---------------------------------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-961650/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- FreeBSD與Linux比較 哪個更“開放”?(轉)Linux
- FreeBSD安裝與配置概述(轉)
- Unix與FreeBSD下檔案的屬性(轉)
- FreeBSD系統登入與退出(轉)
- FreeBSD和Linux共享swap分割槽(轉)Linux
- FreeBSD的非凡特性(轉)
- FreeBSD系統日誌與備份(轉)
- ObjC load與initialize 簡析OBJ
- linux檔案系統簡析Linux
- Linux安裝淺析(轉)Linux
- freebsd簡單漢化終結篇[解決了簡單漢化的所有問題(轉)
- Android Handler與Looper原理簡析AndroidOOP
- HTTP請求與響應簡析HTTP
- 配置FreeBSD核心(轉)
- FreeBSD程式管理(轉)
- FreeBSD安全工具(轉)
- Linux LED驅動原始碼簡析Linux原始碼
- Linux下EPoll通訊模型簡析Linux模型
- GNU/Linux和FreeBSD上的NAT閘道器安裝(轉)Linux
- Linux Kernel File IO Syscall Kernel-Source-Code Analysis(undone)Linux
- FreeBSD 的硬碟分割槽策略(轉)硬碟
- FreeBSD程式的許可權(轉)
- FreeBSD檔案的屬性(轉)
- FreeBSD DHCP的工作過程(轉)
- FreeBSD下PPPoE的設定(轉)
- FreeBSD下PPPoE的設定 (轉)
- FreeBSD對硬碟容量的要求(轉)硬碟
- 多系統安裝實踐(Window /FreeBSD/Linux)(轉)Linux
- 遊戲轉化率①:整體簡析篇遊戲
- linux系統和freebsd系統的安裝(一塊硬碟)(轉)Linux硬碟
- Linux下Apache與Tomcat整合的簡單方法(轉)LinuxApacheTomcat
- FreeBSD軟盤操作(轉)
- FreeBSD shell設定(轉)
- FreeBSD PPP協議(轉)協議
- FreeBSD安裝samba(轉)Samba
- FreeBSD 整合Unix和Windows的方式(轉)Windows
- FreeBSD DNS的體系結構(轉)DNS
- FreeBSD的系統log日誌(轉)