diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ad57c05 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +################################################################################ +# 這個 .gitignore 檔案由 Microsoft(R) Visual Studio 自動建立。 +################################################################################ + +# Visual Studio specific +/.vs/ +*.suo +*.user +*.wsuo +*.vsidx +*.vcxproj.user + +# Build results +[Dd]ebug/ +[Rr]elease/ +x64/ +ARM64/ + +# Dependencies +/vcpkg_installed/ \ No newline at end of file diff --git a/KDemu/KDemu.vcxproj b/KDemu/KDemu.vcxproj index 68d518e..bfcb8f3 100644 --- a/KDemu/KDemu.vcxproj +++ b/KDemu/KDemu.vcxproj @@ -99,6 +99,7 @@ true + Debug diff --git a/KDemu/LoadPE.cpp b/KDemu/LoadPE.cpp index f0ad584..7855939 100644 --- a/KDemu/LoadPE.cpp +++ b/KDemu/LoadPE.cpp @@ -559,6 +559,18 @@ bool PEloader::LoadPE(const std::string path) { IMAGE_DIRECTORY_ENTRY_EXCEPTION, &peFiles[0]->ExceptionTableSize); peFiles[0]->ExceptionTable = peFiles[0]->Base + ((PUCHAR)ExceptionTable - (PUCHAR)peFiles[0]->memMap); + + + uint64_t RtlpInvertedFunctionTableList = 0xfffff80508c18088; + uint64_t imagebase = 0xfffff80508c18090; + uint64_t imagesizebase = 0xfffff80508c18098; + uint64_t ExceptionTableSizebase = 0xfffff80508c1809C; + Emu(uc)->try_write(RtlpInvertedFunctionTableList, &peFiles[0]->ExceptionTable, sizeof(peFiles[0]->ExceptionTable)); + Emu(uc)->try_write(imagebase, &Emu_file_Base, sizeof(Emu_file_Base)); + Emu(uc)->try_write(imagesizebase, &image_size, sizeof(uint32_t)); + Emu(uc)->try_write(ExceptionTableSizebase, &peFiles[0]->ExceptionTableSize, sizeof(uint32_t)); + + FixImport(pe->Base, imports); return true; }