当前位置:  开发笔记 > 前端 > 正文

我们可以修改int 0x80例程吗?

如何解决《我们可以修改int0x80例程吗?》经验,为你挑选了2个好方法。

更新:
1.0x80处理程序在2.4和2.6之间基本相同,尽管从处理程序调用的函数由2.6中的x86-64的'syscall'指令处理程序调用.2. 0x80处理程序可以像内核的其余部分一样进行修改.
3.除非删除向后兼容性,否则不会通过修改来破坏任何内容.例如,如果您有这种倾向,可以添加自己的跟踪或后门.如果您修改处理程序,则表示您将破坏libs和工具链的另一篇文章不正确.如果你破坏了调度算法,或者错误地修改了调度表,那么你就会破坏它.
3A.正如我最初发布的那样,扩展0x80服务的最佳方法是扩展系统调用处理程序.

正如内核消息来源所说:

What:           The kernel syscall interface
Description:
        This interface matches much of the POSIX interface and is based
        on it and other Unix based interfaces.  It will only be added to
        over time, and not have things removed from it.

    Note that this interface is different for every architecture
    that Linux supports.  Please see the architecture-specific
    documentation for details on the syscall numbers that are to be
    mapped to each syscall.


i386的系统调用表条目位于:
arch/i386/kernel/syscall_table.S

注意,该表是一系列指针,因此如果您希望与内核维护者保持一定程度的向前兼容性,则需要在放置指针之前填充表.

系统调用向量编号在irq_vectors.h中定义.
然后,traps.c设置system_call函数via 的地址,set_system_gate将条目放入中断描述符表中.该system_call函数本身是entry.S中,并要求从系统调用表中的要求指针.
有一些内务处理细节,你可以看到读取代码,但直接修改0x80中断处理程序是在entry.S中完成的.system_call功能.以更加理智的方式,您可以修改系统调用表,插入自己的函数而无需修改调度机制.

事实上,在阅读了2.6源代码之后,它直接说到int 0x80和x86-64系统调用使用相同的代码,到目前为止.因此,您可以对x86-32和x86-64进行可移植更改.
END Update

INT 0x80方法调用系统调用表处理程序.这将寄存器参数与调用表进行匹配,并根据EAX寄存器的内容调用内核函数.您可以轻松扩展系统调用表以添加自定义内核API函数.

这甚至可以在x86-64上使用新的系统调用代码,因为它也使用系统调用表.

如果以任何方式更改当前系统调用表而不是扩展它,您将破坏所有依赖库和代码,包括libc,init等.

这是当前的Linux系统调用表:http://asm.sourceforge.net /syscall.html



1> Chris..:

更新:
1.0x80处理程序在2.4和2.6之间基本相同,尽管从处理程序调用的函数由2.6中的x86-64的'syscall'指令处理程序调用.2. 0x80处理程序可以像内核的其余部分一样进行修改.
3.除非删除向后兼容性,否则不会通过修改来破坏任何内容.例如,如果您有这种倾向,可以添加自己的跟踪或后门.如果您修改处理程序,则表示您将破坏libs和工具链的另一篇文章不正确.如果你破坏了调度算法,或者错误地修改了调度表,那么你就会破坏它.
3A.正如我最初发布的那样,扩展0x80服务的最佳方法是扩展系统调用处理程序.

正如内核消息来源所说:

What:           The kernel syscall interface
Description:
        This interface matches much of the POSIX interface and is based
        on it and other Unix based interfaces.  It will only be added to
        over time, and not have things removed from it.

    Note that this interface is different for every architecture
    that Linux supports.  Please see the architecture-specific
    documentation for details on the syscall numbers that are to be
    mapped to each syscall.


i386的系统调用表条目位于:
arch/i386/kernel/syscall_table.S

注意,该表是一系列指针,因此如果您希望与内核维护者保持一定程度的向前兼容性,则需要在放置指针之前填充表.

系统调用向量编号在irq_vectors.h中定义.
然后,traps.c设置system_call函数via 的地址,set_system_gate将条目放入中断描述符表中.该system_call函数本身是entry.S中,并要求从系统调用表中的要求指针.
有一些内务处理细节,你可以看到读取代码,但直接修改0x80中断处理程序是在entry.S中完成的.system_call功能.以更加理智的方式,您可以修改系统调用表,插入自己的函数而无需修改调度机制.

事实上,在阅读了2.6源代码之后,它直接说到int 0x80和x86-64系统调用使用相同的代码,到目前为止.因此,您可以对x86-32和x86-64进行可移植更改.
END Update

INT 0x80方法调用系统调用表处理程序.这将寄存器参数与调用表进行匹配,并根据EAX寄存器的内容调用内核函数.您可以轻松扩展系统调用表以添加自定义内核API函数.

这甚至可以在x86-64上使用新的系统调用代码,因为它也使用系统调用表.

如果以任何方式更改当前系统调用表而不是扩展它,您将破坏所有依赖库和代码,包括libc,init等.

这是当前的Linux系统调用表:http://asm.sourceforge.net /syscall.html



2> greyfade..:

    这是一次建筑改造.一切都在内部发生了变化.SMP支持已经完成,流程调度程序得到了极大的改进,内存管理得到了彻底的改进,还有很多其他的东西.

    是.它是开源软件.如果您没有源代码的副本,可以从供应商或kernel.org获取.

    是的,但这是不可取的,因为它破坏libc,它打破你的baselayout,如果你改变现有系统调用的顺序,它将破坏你的工具链,你可能认为你想要做的几乎所有事情都应该在用户空间完成所有可能的.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有