IA 32 读取命令行参数

发布于 2024-12-18 13:49:16 字数 460 浏览 0 评论 0原文

我正在尝试使用 IA 32 的汇编代码读取命令行参数。我在这里找到了如何执行此操作的说明 http://www.paladingrp.com/ia32.shtml。我可以使用堆栈指针来获取参数的数量,但无法获取参数的值。 这就是我想要做的:

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

我得到正确的指针吗?如果是这样,我如何获得它的价值?如果不是,我如何获得正确的指针?

I am trying to read command line arguments with assembly code for IA 32. I found an explanation of how to do it here http://www.paladingrp.com/ia32.shtml. I am able to use the stack pointer to get the number of arguments but I am not able to get the value of the arguments.
Here is what I am trying to do:

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

Am I getting the correct pointer? If so, how do I get the value of it? If not, how do I get the correct pointer?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一场春暖 2024-12-25 13:49:16

movl (%edx), %ebx # 将 edx 的值移至 ebx

这不会将 EDX 的值移动到 EBX (注释是不正确)。

解引用EDX中的指针,并将解引用的结果放入EBX中。因此,如果您使用 ./a.out foo 调用程序,那么 EBX 最终将是 0x006f6f66 (== '\0oof' ("foo\0 " 以小尾数法表示))

我猜这不是你想要的,但你的问题并不清楚你期望在哪里发生什么。

movl (%edx), %ebx # Move value of edx to ebx

That doesn't move value of EDX to EBX (the comment is incorrect).

That dereferences pointer in EDX, and puts the result of dereference into EBX. So if you invoked your program with ./a.out foo, then EBX will end up being 0x006f6f66 (== '\0oof' ("foo\0" in little-endian)).

I am guessing that's not what you wanted, but your question is not very clear about what you are expecting to happen where.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文