这个(Linux,AT& T,Intel)x86程序用于读取三个参数,并将%ebx中的最大值存储为存在状态。当我将参数弹出到寄存器中时,结果值似乎是字节。我如何获得int值?
[编辑 - 感谢harold在下面的评论我认为问题是如何使用atoi
来获取args的int值。]
.section .text
.globl _start
_start:
popl %edi # Get the number of arguments
popl %eax # Get the program name
popl %ebx # Get the first actual argument
movl (%ebx), %ebx # get the actual value into the register (?)
popl %ecx # ;
movl (%ecx), %ecx
popl %edx #
movl (%edx), %edx
bxcx:
cmpl %ebx,%ecx
jle bxdx
movl %ecx,%ebx
bxdx:
cmpl %ebx,%edx
jle end
movl %edx,%ebx
end:
movl $1,%eax
int $0x80
答案 0 :(得分:3)
为了能够呼叫atoi
,您需要链接libc。 e.g:
ld -lc foo.o
要实际进行调用,您需要遵循cdecl调用约定:
atoi
的签名是
int atoi(const char *nptr);
因此要获取第一个命令行参数的整数值,我们可以
.section .text
.globl _start
_start:
popl %edi # Get the number of arguments
popl %eax # Get the program name
call atoi # Try to read the first argument as an integer and clobber %eax with the value