我正在尝试用IA 32的程序集代码读取命令行参数。我在这里找到了一个解释。我可以使用堆栈指针来获取参数的数量,但无法获取参数的值。
我想做的是:
movl 8(%esp), %edx # Move pointer to argument 1 to edx
movl (%edx), %ebx # Move value of edx to ebx
movl $1, %eax # opcode for exit system call in eax
int $0x80 # return
我得到正确的指针了吗?如果是的话,我怎样才能得到它的价值呢?如果不是,我如何得到正确的指针?
最佳答案
movl (%edx), %ebx # Move value of edx to ebx
这不会将EDX
的值移动到EBX
(注释不正确)。
在EDX
中取消引用指针,并将取消引用的结果放入EBX
中。因此,如果您使用./a.out foo
调用程序,那么EBX
最终将成为0x006f6f66 (== '\0oof' ("foo\0" in little-endian))
。
我猜那不是你想要的,但是你的问题不是很清楚你希望在哪里发生什么。