从Linux 64位汇编程序访问进程命令行时遇到问题。为了用最少的代码重现此,我在此32位程序打印出节目名称的前5个字符:Linux中的进程命令行64位
.section .text
.globl _start
_start:
movl %esp, %ebp
movl $4, %eax # write
movl $1, %ebx # stdout
movl 4(%ebp), %ecx # program name address (argv[0])
movl $5, %edx # hard-coded length
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 # program name address ?
movq $5, %rdx
int $0x80
movq $1, %rax
movq $0, %rbx
int $0x80
我的错误在哪里?
2010-09-16
Alex F