C++ 如何替换可执行C++;共享库的程序?

C++ 如何替换可执行C++;共享库的程序?,c++,linux,g++,shared-libraries,executable,C++,Linux,G++,Shared Libraries,Executable,我想实现一个共享库(change\u func1),它将替换中的函数(func1())!!!可执行文件!!!,这样,另一个文本(例如“HelloUniverse!”)就打印出来,而不是“HelloWorld!” 以下是我到目前为止的源代码: 改变功能1.hpp #ifndef _CHANGE_FUNC1_HPP #define _CHANGE_FUNC1_HPP #include <stdint.h> #include <sys/mman.h> #include <

我想实现一个共享库(
change\u func1
),它将替换中的函数(
func1()
)!!!可执行文件!!!,这样,另一个文本(例如“HelloUniverse!”)就打印出来,而不是“HelloWorld!”

以下是我到目前为止的源代码:

改变功能1.hpp

#ifndef _CHANGE_FUNC1_HPP
#define _CHANGE_FUNC1_HPP

#include <stdint.h>
#include <sys/mman.h>
#include <iostream>

namespace change_func1
{
    void func1(void);

    void hijack_func1(void);
}

#endif /* _CHANGE_FUNC1_HPP */

#include "change_func1.hpp"

namespace change_func1
{
    void func1(void)
    {
        std::cout << "Hello Universe!" << std::endl;
    }

    void hijack_func1(void)
    {
        // ...
    }
}
#include <iostream>

#include "change_func1.hpp"

void func1(void)
{
    std::cout << "Hello World!" << std::endl;
}

int main(void)
{
    change_func1::hijack_func1();

    func1();

    return 0;
}
使用以下命令,主可执行文件中的函数
func1()
被另一个输出“Hello Universe!”

用共享库的另一个函数替换可执行文件中的一个函数以打印出另一个文本的最佳和最简单的方法是什么

我的机器有Linux x86


我希望有人能帮我解决这个问题。

不幸的是,主可执行文件中定义的符号优先于所有其他定义(包括来自
LD\u PRELOAD
的定义)。因此,您将无法通过
LD\u PRELOAD
截取可执行文件中的函数。不幸的是,主可执行文件中定义的符号优先于所有其他定义(包括来自
LD\u PRELOAD
的定义)。因此,您将无法通过
LD\u PRELOAD

截取可执行文件中的函数。您能否更详细地解释一下
hijack\u func1()
在这里用于什么?您能否更详细地解释一下
hijack\u func1()
在这里用于什么?
g++ -Wall -Wextra -shared -fPIC change_func1.cpp -o change_func1.so -ldl
g++ -Wall -Wextra -c main.cpp
g++ -o main main.o change_func1.so -ldl
$ LD_LIBRARY_PATH=. LD_PRELOAD=$PWD/change_func1.so ./main
Hello Universe!