Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了32位Linux上的Syscall或sysenter?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

从MS-DOS开始,我知道使用中断的系统调用.在旧文章中,我看到引用int 80h来调用 Linux上的系统函数.由于现在相当长的一段时间,我知道int 80h已被弃用而不支持syscall指令.但我不能让它在我的32位机器上工作. 这个问题 syscall指令只能在64位平台上使用吗? 32位Linux不使用系统调用吗? 样品测试 在我的32位Linux(Ubuntu PrecisE)上,该程序
从MS-DOS开始,我知道使用中断的系统调用.在旧文章中,我看到引用int 80h来调用 Linux上的系统函数.由于现在相当长的一段时间,我知道int 80h已被弃用而@L_675_5@syscall指令.但我不能让它在我的32位机器上工作.

这个问题

syscall指令只能在64位平台上使用吗? 32位Linux不使用系统调用吗?

样品测试

在我的32位Linux(Ubuntu PrecisE)上,该程序终止于核心转储:

global _start

_start:
        mov     eax,4                ; 4 is write
        mov     ebx,1                ; 1 is stdout
        mov     ecx,message          ; address of String
        mov     edx,length           ; number of bytes
        syscall

        mov     eax,1                ; 1 is exit
        xor     ebx,ebx              ; return @R_281_6756@
        syscall

message:
        db  10,"Hello,World",10,10
length  equ $- message

我尝试使用sysenter而不是syscall,但它以同样的方式崩溃.

解决方法

经过一些网络搜索,我在StackOverflow: Linux invoke a system call via sysenter tutorial上找到了另一个主题.它说调用系统的推荐方法既不使用int 80h也不使用syscall也不使用sysenter,而是使用linux-gate.so.

仍然是关于崩溃和核心转储的问题.我的猜测最后是然系统调用或sysenter指令都可用作cpu指令,但可能是Linux内核在确定它在给定硬件平台上并不真正有用时,不能正确设置这个“入口点”.

似乎32位平台,sysenter或系统调用可用,而它始终可用,仅在64位平台上可用.

然我觉得这回答了我的问题,但我仍然欢迎更多的材料,比如我上面猜测的权威参.

– 更新 –

至少,我可以找到确认上述内容.这仍然不是一个权威的参,但我相信它似乎足够可信.

What is linux-gate.so.1?,说:

此外,从另一个来源,一个示例FASM汇编源(如果您使用NASM需要一些翻译),通过linux-gate.soFinding linux-gate.so.1 in Assembly 调用系统函数.

大佬总结

以上是大佬教程为你收集整理的32位Linux上的Syscall或sysenter?全部内容,希望文章能够帮你解决32位Linux上的Syscall或sysenter?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。