mirror of
https://github.com/hedge-dev/XenonRecomp.git
synced 2025-04-19 19:01:17 +00:00
Prettify main.cpp
thanks nano
This commit is contained in:
parent
c7d9e1e1b2
commit
914b61d986
@ -26,11 +26,11 @@ void ReadTable(Image& image, SwitchTable& table)
|
||||
uint32_t pOffset;
|
||||
ppc_insn insn;
|
||||
auto* code = (uint32_t*)image.Find(table.base);
|
||||
ppc::Disassemble(code, table.base, insn); // lis
|
||||
pOffset = insn.operands[1] << 16; // Upper 16 bits
|
||||
ppc::Disassemble(code, table.base, insn); // lis
|
||||
pOffset = insn.operands[1] << 16; // Upper 16 bits
|
||||
|
||||
ppc::Disassemble(code + 2, table.base + 8, insn); // addi (skip rlwinm at +4)
|
||||
pOffset += insn.operands[2]; // Lower 16 bits
|
||||
ppc::Disassemble(code + 2, table.base + 8, insn); // addi (skip rlwinm at +4)
|
||||
pOffset += insn.operands[2]; // Lower 16 bits
|
||||
|
||||
if (table.type == SWITCH_ABSOLUTE)
|
||||
{
|
||||
@ -213,53 +213,53 @@ int main(int argc, char** argv)
|
||||
println("# Generated by XenonAnalyse");
|
||||
|
||||
auto scanPattern = [&](uint32_t* pattern, size_t count, size_t type)
|
||||
{
|
||||
for (const auto& section : image.sections)
|
||||
{
|
||||
for (const auto& section : image.sections)
|
||||
if (!(section.flags & SectionFlags_Code))
|
||||
{
|
||||
if (!(section.flags & SectionFlags_Code))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
size_t base = section.base;
|
||||
uint8_t* data = section.data;
|
||||
uint8_t* dataStart = section.data;
|
||||
uint8_t* dataEnd = section.data + section.size;
|
||||
while (data < dataEnd && data != nullptr)
|
||||
{
|
||||
data = (uint8_t*)SearchMask(data, pattern, count, dataEnd - data);
|
||||
|
||||
if (data != nullptr)
|
||||
{
|
||||
SwitchTable table{};
|
||||
table.type = type;
|
||||
ScanTable((uint32_t*)data, base + (data - dataStart), table);
|
||||
|
||||
// fmt::println("{:X} ; jmptable - {}", base + (data - dataStart), table.labels.size());
|
||||
if (table.base != 0)
|
||||
{
|
||||
ReadTable(image, table);
|
||||
printTable(table);
|
||||
switches.emplace_back(std::move(table));
|
||||
}
|
||||
|
||||
data += 4;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
||||
// adjusted for tag 2
|
||||
uint32_t absoluteSwitch[] =
|
||||
{
|
||||
PPC_INST_LIS,
|
||||
PPC_INST_RLWINM, // (slwi alias)
|
||||
PPC_INST_ADDI,
|
||||
PPC_INST_LWZX,
|
||||
PPC_INST_MTCTR,
|
||||
PPC_INST_BCTR
|
||||
};
|
||||
size_t base = section.base;
|
||||
uint8_t* data = section.data;
|
||||
uint8_t* dataStart = section.data;
|
||||
uint8_t* dataEnd = section.data + section.size;
|
||||
while (data < dataEnd && data != nullptr)
|
||||
{
|
||||
data = (uint8_t*)SearchMask(data, pattern, count, dataEnd - data);
|
||||
|
||||
if (data != nullptr)
|
||||
{
|
||||
SwitchTable table{};
|
||||
table.type = type;
|
||||
ScanTable((uint32_t*)data, base + (data - dataStart), table);
|
||||
|
||||
// fmt::println("{:X} ; jmptable - {}", base + (data - dataStart), table.labels.size());
|
||||
if (table.base != 0)
|
||||
{
|
||||
ReadTable(image, table);
|
||||
printTable(table);
|
||||
switches.emplace_back(std::move(table));
|
||||
}
|
||||
|
||||
data += 4;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// adjusted for tag 2
|
||||
uint32_t absoluteSwitch[] =
|
||||
{
|
||||
PPC_INST_LIS,
|
||||
PPC_INST_RLWINM, // (slwi alias)
|
||||
PPC_INST_ADDI,
|
||||
PPC_INST_LWZX,
|
||||
PPC_INST_MTCTR,
|
||||
PPC_INST_BCTR
|
||||
};
|
||||
|
||||
uint32_t computedSwitch[] =
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user