单op,variable oprand是咋做到的
bash-3.2# objdump -d test1 | grep call804825b: 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长度? 原帖由 valpa 于 2008-9-22 11:29 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
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规则呀 原帖由 valpa 于 2008-9-22 11:29 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
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 值 http://linux.chinaunix.net/bbs/thread-1029027-1-2.html
这个讨论是不是可以帮到你呢? 原帖由 cjaizss 于 2008-9-24 10:59 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
http://linux.chinaunix.net/bbs/thread-1029027-1-2.html
这个讨论是不是可以帮到你呢?
那个贴子和 LZ 问的问题是两码事。
他的问题偶已经回答了,但 LZ 态度来看,根本不是想来讨论学习的。从他几个贴子可以看出。 警告:LZ 你下次再是这种态度讨论的话,偶势必会让你在这个版里禁言。 原帖由 mik 于 2008-9-24 23:31 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
那个贴子和 LZ 问的问题是两码事。
他的问题偶已经回答了,但 LZ 态度来看,根本不是想来讨论学习的。从他几个贴子可以看出。
其实化为数学抽象表达的话本质上是一回事,只是“协议”不一样。
不过LZ的态度确实........发了帖子就跑了...........
呵呵 原帖由 mik 于 2008-9-24 23:31 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
那个贴子和 LZ 问的问题是两码事。
他的问题偶已经回答了,但 LZ 态度来看,根本不是想来讨论学习的。从他几个贴子可以看出。
Oh My God
一定要说谢谢吗 原帖由 cjaizss 于 2008-9-25 08:43 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
其实化为数学抽象表达的话本质上是一回事,只是“协议”不一样。
不过LZ的态度确实........发了帖子就跑了...........
呵呵
能否给个给个reference,不明白为啥本质一回事
回复 #9 valpa 的帖子
其实都是因为潜在的隐含信息指明了参数的长度;printf函数是如何指定后面的参数的长度不知道你是否清楚,它是通过第一个参数来间接指示后面的参数的。
也可以明指示,比如写一个累和的函数int sum(int x,.....)
x表示参数的个数
无论怎么指明,都是要通过一种方法告诉机器或者人。
页:
[1]
2