简析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

  ---------------------------------------------------------------------

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10617731/viewspace-961650/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10617731/viewspace-961650/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值