答案 here 表示 ESP + 4 指向 argv[0] . 但我没办法做到:
ESP + 4
argv[0]
.section .text .globl _start _start: movl 8(%esp), %ebx movl $1, %eax int $0x80
现在当我尝试执行这个:
$ as --32 argv.s -o argv.o $ ld -m elf_i386 argv.o -o argv $ ./argv 2 $ echo $? 16
它显示 16 虽然我在这里预计16岁。我做错什么了?
16
多亏了彼得的评论,我终于找到了答案。自 argv 是一个 pointer to pointer to char ,在第一次取消引用时,您将得到一个指向字符的指针地址。再次取消引用将得到所需的结果:
argv
char
.section .text .globl _start _start: movl 8(%esp), %ebx movl (%ebx), %ebx movl $1, %eax int $0x80
执行时:
$ ./argv 1 49
ASCII character 属于 1
1