单op,variable oprand是咋做到的

发布于 2022-09-22 11:21:44 字数 2434 浏览 11 评论 0

bash-3.2# objdump -d test1 | grep call
804825b:        e8 00 00 00 00               call   8048260 <_init+0xc>
8048271:        e8 1e 00 00 00               call   8048294 <__gmon_start__@plt>
8048276:        e8 d5 00 00 00               call   8048350 <frame_dummy>
804827b:        e8 80 01 00 00               call   8048400 <__do_global_ctors_aux>
80482dc:        e8 c3 ff ff ff               call   80482a4 <__libc_start_main@plt>
8048328:        ff 14 85 5c 94 04 08         call   *0x804945c(,%eax,4)
804836f:        ff d0                        call   *%eax
80483a6:        e8 4f 00 00 00               call   80483fa <__i686.get_pc_thunk.bx>
80483b4:        e8 9b fe ff ff               call   8048254 <_init>
80483e4:        ff 94 b3 18 ff ff ff         call   *-0xe8(%ebx,%esi,4)
804841b:        ff d0                        call   *%eax
8048433:        e8 00 00 00 00               call   8048438 <_fini+0xc>
804843f:        e8 ac fe ff ff               call   80482f0 <__do_global_dtors_aux>

其中
80483e4:        ff 94 b3 18 ff ff ff         call   *-0xe8(%ebx,%esi,4)
804841b:        ff d0                        call   *%eax

CPU是如何判断call(ff)的oprand长度?

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

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

发布评论

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

评论(9

野心澎湃 2022-09-29 11:21:44

原帖由 valpa 于 2008-9-22 11:29 发表
bash-3.2# objdump -d test1 | grep call
804825b:        e8 00 00 00 00               call   8048260
8048271:        e8 1e 00 00 00               call   8048294
8048276:        e8 d5 00 00 00               call   8048350
804827b ...

根据call 的op规则呀

妖妓 2022-09-29 11:21:44

原帖由 valpa 于 2008-9-22 11:29 发表
bash-3.2# objdump -d test1 | grep call
804825b:        e8 00 00 00 00               call   8048260
8048271:        e8 1e 00 00 00               call   8048294
8048276:        e8 d5 00 00 00               call   8048350
804827b ...

具体点:依赖于 call 的 opcode (ff) 的 ModRM 值

情绪 2022-09-29 11:21:44

http://linux.chinaunix.net/bbs/thread-1029027-1-2.html
这个讨论是不是可以帮到你呢?

断舍离 2022-09-29 11:21:44

原帖由 cjaizss 于 2008-9-24 10:59 发表
http://linux.chinaunix.net/bbs/thread-1029027-1-2.html
这个讨论是不是可以帮到你呢?

那个贴子和 LZ 问的问题是两码事。

他的问题偶已经回答了,但 LZ 态度来看,根本不是想来讨论学习的。从他几个贴子可以看出。

宛菡 2022-09-29 11:21:44

警告:LZ 你下次再是这种态度讨论的话,偶势必会让你在这个版里禁言。

飘过的浮云 2022-09-29 11:21:44

原帖由 mik 于 2008-9-24 23:31 发表

那个贴子和 LZ 问的问题是两码事。

他的问题偶已经回答了,但 LZ 态度来看,根本不是想来讨论学习的。从他几个贴子可以看出。

其实化为数学抽象表达的话本质上是一回事,只是“协议”不一样。
不过LZ的态度确实........发了帖子就跑了...........
呵呵

尾戒 2022-09-29 11:21:44

原帖由 mik 于 2008-9-24 23:31 发表

那个贴子和 LZ 问的问题是两码事。

他的问题偶已经回答了,但 LZ 态度来看,根本不是想来讨论学习的。从他几个贴子可以看出。

Oh My God

一定要说谢谢吗

×纯※雪 2022-09-29 11:21:44

原帖由 cjaizss 于 2008-9-25 08:43 发表

其实化为数学抽象表达的话本质上是一回事,只是“协议”不一样。
不过LZ的态度确实........发了帖子就跑了...........
呵呵

能否给个给个reference,不明白为啥本质一回事

哎呦我呸! 2022-09-29 11:21:44

其实都是因为潜在的隐含信息指明了参数的长度;
printf函数是如何指定后面的参数的长度不知道你是否清楚,它是通过第一个参数来间接指示后面的参数的。
也可以明指示,比如写一个累和的函数int sum(int x,.....)
x表示参数的个数
无论怎么指明,都是要通过一种方法告诉机器或者人。

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