2 zhuweidong1992 zhuweidong1992 于 2016.03.22 15:54 提问

linux汇编语言的语句有疑问

看了函数指针数组,汇编出来的代码有call *%eax这样一个语句,不明白,求解答

2个回答

caozhy
caozhy   Ds   Rxr 2016.03.22 16:10
已采纳

(%eax)是获得 %eax 寄存器指向内存的内容。 这里eax事先放了一个代码的入口地址,用call调用,相当于跳转到那里。

zhuweidong1992
zhuweidong1992 谢谢
一年多之前 回复
caozhy
caozhy 回复zhuweidong1992: 在 AT&T 汇编格式中,绝对转移和调用指令(jump/call)的操作数前要加上'*'作为前缀,而在 Intel 格式中则不需要。
一年多之前 回复
zhuweidong1992
zhuweidong1992 前面那个*和加()是一个意思吗?
一年多之前 回复
caozhy
caozhy 回复zhuweidong1992: 问题解决了,请麻烦点下我回答右边的采纳,谢谢
一年多之前 回复
zhuweidong1992
zhuweidong1992 谢谢
一年多之前 回复
qq_34368274
qq_34368274   2016.03.22 16:08

(%eax)是获得 %eax 寄存器指向内存的内容。 call是调用函数,一般后面接Label name。
我的理解是寄存器%eax中储存了一个函数的起始地址,然后通过解引用%eax来调用这个函数。

zhuweidong1992
zhuweidong1992 谢谢
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!