【发布时间】:2011-04-13 09:42:14
【问题描述】:
我在从 Linux 64 位汇编程序访问进程命令行时遇到问题。为了用最少的代码重现这一点,我制作了这个 32 位程序,它打印程序名称的前 5 个字符:
.section .text .globl _start _开始: movl %esp, %ebp movl $4, %eax # 写入 movl $1, %ebx # 标准输出 movl 4(%ebp), %ecx # 程序名地址 (argv[0]) movl $5, %edx # 硬编码长度 诠释 $0x80 移动 $1, %eax 移动 $0, %ebx 诠释 $0x80这个程序正在运行。当我将其翻译为 64 位并在 Linux 64 中运行时,它不会打印任何内容:
.section .text .globl _start _开始: movq %rsp, %rbp movq $4, %rax movq $1, %rbx movq 8(%rbp), %rcx # 程序名地址 ? movq $5, %rdx 诠释 $0x80 movq $1, %rax movq $0, %rbx 诠释 $0x80我的错误在哪里?
【问题讨论】: