大佬教程收集整理的这篇文章主要介绍了32位Linux上的Syscall或sysenter?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这个问题
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,但它以同样的方式崩溃.
仍然是关于崩溃和核心转储的问题.我的猜测最后是虽然系统调用或sysenter指令都可用作cpu指令,但可能是Linux内核在确定它在给定硬件平台上并不真正有用时,不能正确设置这个“入口点”.
似乎32位平台,sysenter或系统调用可用,而它始终可用,仅在64位平台上可用.
虽然我觉得这回答了我的问题,但我仍然欢迎更多的材料,比如我上面猜测的权威参考.
– 更新 –
至少,我可以找到确认上述内容.这仍然不是一个权威的参考,但我相信它似乎足够可信.
此外,从另一个来源,一个示例FASM汇编源(如果您使用NASM需要一些翻译),通过linux-gate.so:Finding linux-gate.so.1 in Assembly 调用系统函数.
以上是大佬教程为你收集整理的32位Linux上的Syscall或sysenter?全部内容,希望文章能够帮你解决32位Linux上的Syscall或sysenter?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。