sample hle function loading (libc)
This commit is contained in:
parent
e0cee2d7fd
commit
79a6464c58
|
@ -34,7 +34,7 @@ add_executable(shadps4
|
||||||
src/Core/Memory.h
|
src/Core/Memory.h
|
||||||
src/Core/PS4/Linker.cpp
|
src/Core/PS4/Linker.cpp
|
||||||
src/Core/PS4/Linker.h
|
src/Core/PS4/Linker.h
|
||||||
"src/Util/Singleton.h" "src/Util/Disassembler.cpp" "src/Util/Disassembler.h" "src/Util/StringUtil.h" "src/Core/PS4/Util/aerolib.h" "src/Core/PS4/Loader/SymbolsResolver.h" "src/Core/PS4/Loader/SymbolsResolver.cpp" "src/Core/PS4/HLE/Libs.cpp" "src/Core/PS4/HLE/Libs.h")
|
"src/Util/Singleton.h" "src/Util/Disassembler.cpp" "src/Util/Disassembler.h" "src/Util/StringUtil.h" "src/Core/PS4/Util/aerolib.h" "src/Core/PS4/Loader/SymbolsResolver.h" "src/Core/PS4/Loader/SymbolsResolver.cpp" "src/Core/PS4/HLE/Libs.cpp" "src/Core/PS4/HLE/Libs.h" "src/Core/PS4/HLE/LibC.cpp" "src/Core/PS4/HLE/LibC.h")
|
||||||
|
|
||||||
find_package(OpenGL REQUIRED)
|
find_package(OpenGL REQUIRED)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
#include "LibC.h"
|
||||||
|
#include "../Loader/Elf.h"
|
||||||
|
|
||||||
|
namespace HLE::Libs::LibC {
|
||||||
|
|
||||||
|
static void init_env() //every game/demo should probably
|
||||||
|
{
|
||||||
|
__debugbreak();//if we reach here it will be a great progress :D
|
||||||
|
}
|
||||||
|
|
||||||
|
void LibC_RegisterFunc(SymbolsResolver* sym)
|
||||||
|
{
|
||||||
|
//TODO this will be convert to macro probably once we decide how will it work and what's the best
|
||||||
|
SymbolRes sr {};
|
||||||
|
sr.name = "bzQExy189ZI";
|
||||||
|
sr.library = "libc";
|
||||||
|
sr.library_version = 1;
|
||||||
|
sr.module = "libc";
|
||||||
|
sr.module_version_major = 1;
|
||||||
|
sr.module_version_minor = 1;
|
||||||
|
sr.type = STT_FUN;
|
||||||
|
auto func = reinterpret_cast<u64>(init_env);
|
||||||
|
sym->AddSymbol(sr, func);
|
||||||
|
}
|
||||||
|
};
|
|
@ -0,0 +1,10 @@
|
||||||
|
#pragma once
|
||||||
|
#include "../Loader/SymbolsResolver.h"
|
||||||
|
|
||||||
|
namespace HLE::Libs::LibC {
|
||||||
|
|
||||||
|
void LibC_RegisterFunc(SymbolsResolver* sym);
|
||||||
|
//functions
|
||||||
|
static void init_env();
|
||||||
|
|
||||||
|
};
|
|
@ -1,9 +1,10 @@
|
||||||
#include "Libs.h"
|
#include "Libs.h"
|
||||||
|
#include "LibC.h"
|
||||||
|
|
||||||
namespace HLE::Libs {
|
namespace HLE::Libs {
|
||||||
|
|
||||||
void Init_HLE_Libs(SymbolsResolver *sym)
|
void Init_HLE_Libs(SymbolsResolver *sym)
|
||||||
{
|
{
|
||||||
|
LibC::LibC_RegisterFunc(sym);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -13,6 +13,7 @@ static u64 g_load_addr = SYSTEM_RESERVED + CODE_BASE_OFFSET;
|
||||||
|
|
||||||
Linker::Linker()
|
Linker::Linker()
|
||||||
{
|
{
|
||||||
|
m_HLEsymbols = new SymbolsResolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
Linker::~Linker()
|
Linker::~Linker()
|
||||||
|
|
|
@ -109,9 +109,12 @@ public:
|
||||||
void LoadModuleToMemory(Module* m);
|
void LoadModuleToMemory(Module* m);
|
||||||
void LoadDynamicInfo(Module* m);
|
void LoadDynamicInfo(Module* m);
|
||||||
void LoadSymbols(Module* m);
|
void LoadSymbols(Module* m);
|
||||||
|
SymbolsResolver* getHLESymbols() { return m_HLEsymbols; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const ModuleInfo* FindModule(const Module& m, const std::string& id);
|
const ModuleInfo* FindModule(const Module& m, const std::string& id);
|
||||||
const LibraryInfo* FindLibrary(const Module& program, const std::string& id);
|
const LibraryInfo* FindLibrary(const Module& program, const std::string& id);
|
||||||
|
|
||||||
std::vector<Module*> m_modules;
|
std::vector<Module*> m_modules;
|
||||||
|
SymbolsResolver* m_HLEsymbols = nullptr;
|
||||||
};
|
};
|
|
@ -28,6 +28,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <Zydis/Zydis.h>
|
#include <Zydis/Zydis.h>
|
||||||
|
#include "Core/PS4/HLE/Libs.h"
|
||||||
|
|
||||||
// Main code
|
// Main code
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
|
@ -35,8 +36,9 @@ int main(int argc, char* argv[])
|
||||||
|
|
||||||
|
|
||||||
logging::init(true);//init logging
|
logging::init(true);//init logging
|
||||||
const char* const path = argv[1]; //argument 1 is the path of self file to boot
|
const char* const path = argv[1]; //argument 1 is the path of self file to boot
|
||||||
auto* linker = Singleton<Linker>::Instance();
|
auto* linker = Singleton<Linker>::Instance();
|
||||||
|
HLE::Libs::Init_HLE_Libs(linker->getHLESymbols());
|
||||||
auto *module =linker->LoadModule(path);//load main executable
|
auto *module =linker->LoadModule(path);//load main executable
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
Loading…
Reference in New Issue