为了账号安全,请及时绑定邮箱和手机立即绑定

如果在64位代码中使用32位INT0x80LinuxABI怎么办?

如果在64位代码中使用32位INT0x80LinuxABI怎么办?

30秒到达战场 2019-05-30 16:10:44
如果在64位代码中使用32位INT0x80LinuxABI怎么办?int 0x80在linux上,无论从哪个模式调用:args,都总是调用32位abi。ebx, ecx.。和SysCall的数字/usr/include/asm/unistd_32.h。(或在未编译的64位内核上崩溃CONFIG_IA32_EMULATION).64位代码应该使用syscall的电话号码/usr/include/asm/unistd_64.h,和ARGS在rdi, rsi等看见i 386和x86-64上UNIX&Linux系统调用的调用约定是什么?。如果你的问题是重复的,有关您的详细信息,请参阅该链接。应用32位或64位代码进行系统调用.如果你想知道到底发生了什么,继续阅读。syscall系统调用比int 0x80系统调用,所以使用本机64位。syscall除非您正在编写在32位或64位执行时运行相同的Polyglot机器代码。(sysenter总是以32位模式返回,因此它在64位用户空间中并不有用,尽管它是一个有效的x86-64指令。)有关:Linux系统调用的最终指南(关于x86)如何使int 0x80或sysenter32位系统调用,或syscall64位系统调用,或调用vdso进行“虚拟”系统调用,如gettimeofday。再加上系统调用的背景信息。使用int 0x80这样就可以编写以32位或64位模式组装的东西,因此对于exit_group()在微基准的末尾什么的。当前正式的i 386和x86-64系统VpsABI文档的PDF标准化功能和SysCall调用约定是从https:/github.com/hjl-tools/x86-psABI/wiki/x86psabi.见x86标签维基对于初学者指南、x86手册、正式文档和性能优化指南/资源。但是,由于人们不断地用代码发布问题,int 0x8064位码,或者是不小心构建64位二进制文件从为32位编写的源代码中,我想知道什么一点儿没错是否发生在当前的Linux上?是吗?int 0x80保存/恢复所有64位寄存器?它是否将任何寄存器截断为32位?如果你通过具有非零上半部的指针args,会发生什么情况?如果你把32位指针传递给它,它会起作用吗?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 1162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信