我有问题访问Linux 64位汇编程序的进程命令行。为了用最少的代码重现这个问题,我写了一个32位程序,它打印程序名称的前5个字符:
.section .text
.globl _start _start: movl %esp, %ebp movl $4, %eax # 写入 movl $1, %ebx # 标准输出 movl 4(%ebp), %ecx # 程序名地址 (argv[0]) movl $5, %edx # 硬编码长度 int $0x80
movl $1, %eax movl $0, %ebx int $0x80
这个程序是工作的。当我将其转换为64位并在Linux 64中运行时,它没有打印任何东西:
.section .text
.globl _start _start: movq %rsp, %rbp movq $4, %rax movq $1, %rbx movq 8(%rbp), %rcx # 程序名地址 ? movq $5, %rdx int $0x80
movq $1, %rax movq $0, %rbx int $0x80
我的错误在哪里?
.section .text
.globl _start _start: movl %esp, %ebp movl $4, %eax # 写入 movl $1, %ebx # 标准输出 movl 4(%ebp), %ecx # 程序名地址 (argv[0]) movl $5, %edx # 硬编码长度 int $0x80
movl $1, %eax movl $0, %ebx int $0x80
这个程序是工作的。当我将其转换为64位并在Linux 64中运行时,它没有打印任何东西:
.section .text
.globl _start _start: movq %rsp, %rbp movq $4, %rax movq $1, %rbx movq 8(%rbp), %rcx # 程序名地址 ? movq $5, %rdx int $0x80
movq $1, %rax movq $0, %rbx int $0x80
我的错误在哪里?