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!