首页 > UniX技术

全面了解Linux与FreeBSD的syscall相同与不同!

时间:2009-04-15 17:57:37  作者:chinaitlab  我要投稿
Linux初探欢迎您的投稿,投放方法请点击这里查看,我们会定期赠送精美小礼品给优秀的投稿作者。海纳百川 取则行远!LinuxGoo欢迎您的到来。
  --]概述又是一个不眠的夜晚,其实这篇文档是不应该发表的,因为保密的原则吧,但是我仔细google了下,没有类似的文章,而且发表的这部分文档也不至于被认为是什么绝......

 

 

  上面的的汇编代码可以直接编译来获取shellcode,按照前面说的编译办法编译,然后:

  objdump -D hello > hello.txt

  把获得的机器码copy出来就是一个linux下面的shellcode了.

  C: 为什么FreeBSD与Linux下面的shellcode不同?

  这个问题,我想留给大家先思考下,然后再看我的下文.如果你看了我的下文还是不了解的话...那么可能的情况

  是你根本还不会汇编和Unix类型的编程...还有一个情况是,你太笨了:(

  C-1: Linux的syscall的系统调用是如下的过程:

  高级语言调用系统函数|

  ->jump syscall(即系统对系统函数的标识)|

  ->把syscall的参数赋给寄存器|

  ->mov eax,0x**(及上面write函数针对syscall的数值)|

  ->int 0x80|

  ->返回|

  那么,我们的shellcode在push参数的时候,就比较随便一些了,因为在后面的系统级别的syscall又对参数进行了二

  次的赋值,赋值给各个寄存器,然后才调用syscall.

  C-2: FreeBSD的syscall系统调用是如下的过程:

  高级语言调用系统函数|

  ->jump syscall(即系统对系统函数的标识)|

  ->mov eax,0x**(及上面write函数针对syscall的数值)|

  ->int 0x80|

  看到没有,或者说前面的内容记忆起来了吧?freebsd的syscall调用是在进入系统syscall前就push进来的,所以我们的

  shellcode必须得把参数的值先push进来,而不是象linux那样的随意.

  --]总结

  其实,最后这部分关于shellcode的不同之处,真正要写的话,估计还得整整的一篇内容.但是...人是铁饭是钢,一顿不吃

  饿的慌.于是准备做下逃兵,先去添饱肚子,然后美美的睡一觉.顺便做个美梦,在梦中,偶的"老大"又开始欺负偶了...

如果您需转载 全面了解Linux与FreeBSD的syscall相同与不同!,请注明来自LinuxGoo.com,其版权归原作者所有。请广大网友留言时遵纪守法,使用文明用语。如果您在应用中有什么问题,请在下面留言,我们会尽快解答。
来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
栏目热门