免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4243 | 回复: 12
打印 上一主题 下一主题

单op,variable oprand是咋做到的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-22 11:29 |只看该作者 |倒序浏览
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长度?

论坛徽章:
0
2 [报告]
发表于 2008-09-22 11:36 |只看该作者
原帖由 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规则呀

论坛徽章:
0
3 [报告]
发表于 2008-09-22 11:40 |只看该作者
原帖由 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 值

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
4 [报告]
发表于 2008-09-24 10:59 |只看该作者
http://linux.chinaunix.net/bbs/thread-1029027-1-2.html
这个讨论是不是可以帮到你呢?

论坛徽章:
0
5 [报告]
发表于 2008-09-24 23:31 |只看该作者
原帖由 cjaizss 于 2008-9-24 10:59 发表
http://linux.chinaunix.net/bbs/thread-1029027-1-2.html
这个讨论是不是可以帮到你呢?


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

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

论坛徽章:
0
6 [报告]
发表于 2008-09-24 23:34 |只看该作者
警告:LZ 你下次再是这种态度讨论的话,偶势必会让你在这个版里禁言。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
7 [报告]
发表于 2008-09-25 08:43 |只看该作者
原帖由 mik 于 2008-9-24 23:31 发表


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

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

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

论坛徽章:
0
8 [报告]
发表于 2008-09-25 12:45 |只看该作者
原帖由 mik 于 2008-9-24 23:31 发表


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

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



Oh My God

一定要说谢谢吗

论坛徽章:
0
9 [报告]
发表于 2008-09-25 12:47 |只看该作者
原帖由 cjaizss 于 2008-9-25 08:43 发表

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



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

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
10 [报告]
发表于 2008-09-25 12:56 |只看该作者

回复 #9 valpa 的帖子

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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP