gpt4 book ai didi

c++ - "call"看似跳入自身的指令

转载 作者:太空狗 更新时间:2023-10-29 23:38:05 24 4
gpt4 key购买 nike

我有一些C++代码

#include <cstdio>
#include <boost/bind.hpp>
#include <boost/function.hpp>

class A {
public:
void do_it() { std::printf("aaa"); }
};

void
call_it(const boost::function<void()> &f)
{
f();
}

void
func()
{
A *a = new A;
call_it(boost::bind(&A::do_it, a));
}

gcc 4 编译成以下程序集(来自 objdump):

00000030 <func()>:
30: 55 push %ebp
31: 89 e5 mov %esp,%ebp
33: 56 push %esi
34: 31 f6 xor %esi,%esi
36: 53 push %ebx
37: bb 00 00 00 00 mov $0x0,%ebx
3c: 83 ec 40 sub $0x40,%esp
3f: c7 04 24 01 00 00 00 movl $0x1,(%esp)
46: e8 fc ff ff ff call 47 <func()+0x17>
4b: 8d 55 ec lea 0xffffffec(%ebp),%edx
4e: 89 14 24 mov %edx,(%esp)
51: 89 5c 24 04 mov %ebx,0x4(%esp)
55: 89 74 24 08 mov %esi,0x8(%esp)
59: 89 44 24 0c mov %eax,0xc(%esp)
; the rest of the function is omitted

这里call指令的操作数我看不懂,为什么调用到自身,却少了一个字节?

最佳答案

调用可能是对外部函数的调用,您看到的地址 (FFFFFFFC) 只是真实地址的占位符,链接器和/或加载器稍后会处理。

关于c++ - "call"看似跳入自身的指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2550822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com