Macos 将32位程序集转换为64位程序集(Mac OS X)
作为一个学习项目,我想将32位Exeve脚本从转换为64位。然而,当我尝试执行它时,我得到了一个分段错误。我用GDB检查了一下,找到了问题说明。我目前的代码如下:Macos 将32位程序集转换为64位程序集(Mac OS X),macos,assembly,64-bit,Macos,Assembly,64 Bit,作为一个学习项目,我想将32位Exeve脚本从转换为64位。然而,当我尝试执行它时,我得到了一个分段错误。我用GDB检查了一下,找到了问题说明。我目前的代码如下: .section __DATA,__data .section __TEXT,__text .globl _main _main: xor %rax, %rax push %rax push $0x68732f6e push $0x69622f2f mov %rbx, %rsp ===>push %rax ;this is
.section __DATA,__data
.section __TEXT,__text
.globl _main
_main:
xor %rax, %rax
push %rax
push $0x68732f6e
push $0x69622f2f
mov %rbx, %rsp
===>push %rax ;this is where the error occurs
mov %rdx, %rsp
push %rbx
mov %rcx, %rsp
mov %al, 11
int $0x80
使用Intel语法,而使用AT&T语法,但忘记了切换参数顺序。在英特尔语法中,参数顺序是dest,src,而在AT&T语法中,参数顺序是src,dest.FYI,这是不够的。64位系统调用约定不同,而且两次推送也不会创建连续字符串,因为它们也是64位的。使用Intel语法,而使用AT&T语法,但忘记了切换参数顺序。在英特尔语法中,参数顺序是dest,src,而在AT&T语法中,参数顺序是src,dest.FYI,这是不够的。64位系统调用约定不同,而且两次推送也不会创建连续字符串,因为它们也是64位的。