单op,variable oprand是咋做到的
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
根据call 的op规则呀
具体点:依赖于 call 的 opcode (ff) 的 ModRM 值
http://linux.chinaunix.net/bbs/thread-1029027-1-2.html
这个讨论是不是可以帮到你呢?
那个贴子和 LZ 问的问题是两码事。
他的问题偶已经回答了,但 LZ 态度来看,根本不是想来讨论学习的。从他几个贴子可以看出。
警告:LZ 你下次再是这种态度讨论的话,偶势必会让你在这个版里禁言。
其实化为数学抽象表达的话本质上是一回事,只是“协议”不一样。
不过LZ的态度确实........发了帖子就跑了...........
呵呵
Oh My God
一定要说谢谢吗
能否给个给个reference,不明白为啥本质一回事
其实都是因为潜在的隐含信息指明了参数的长度;
printf函数是如何指定后面的参数的长度不知道你是否清楚,它是通过第一个参数来间接指示后面的参数的。
也可以明指示,比如写一个累和的函数int sum(int x,.....)
x表示参数的个数
无论怎么指明,都是要通过一种方法告诉机器或者人。