Add source code for ctrtool

This commit is contained in:
jakcron
2022-03-12 16:00:33 +08:00
parent 6ad2f13c50
commit 800f5776bc
681 changed files with 219734 additions and 0 deletions
@@ -0,0 +1,173 @@
#include <tc/Exception.h>
#include <iostream>
#include <sstream>
#include <iomanip>
#include "bn_binaryutils_TestClass.h"
void bn_binaryutils_TestClass::runAllTests(void)
{
std::cout << "[tc::bn (BinaryUtils)] START" << std::endl;
test_RoundUpFunc();
test_AlignFunc();
test_MakeStructMagicU32Func();
test_MakeStructMagicU64Func();
std::cout << "[tc::bn (BinaryUtils)] END" << std::endl;
}
void bn_binaryutils_TestClass::test_RoundUpFunc()
{
std::cout << "[tc::bn (BinaryUtils)] test_RoundUpFunc : " << std::flush;
try
{
try
{
util_RoundUpFuncTestCase(0, 0x200, 0x200);
util_RoundUpFuncTestCase(1, 0x200, 0x200);
util_RoundUpFuncTestCase(0x10, 0x200, 0x200);
util_RoundUpFuncTestCase(0x1FF, 0x200, 0x200);
util_RoundUpFuncTestCase(0x200, 0x200, 0x400);
util_RoundUpFuncTestCase(0x201, 0x200, 0x400);
util_RoundUpFuncTestCase(0x3FF, 0x200, 0x400);
util_RoundUpFuncTestCase(0xDEADBE00, 0x200, 0xDEADC000);
util_RoundUpFuncTestCase(0xDEADBEEF, 0x200, 0xDEADC000);
std::cout << "PASS" << std::endl;
}
catch (const tc::Exception& e)
{
std::cout << "FAIL (" << e.error() << ")" << std::endl;
}
}
catch (const std::exception& e)
{
std::cout << "UNHANDLED EXCEPTION (" << e.what() << ")" << std::endl;
}
}
void bn_binaryutils_TestClass::util_RoundUpFuncTestCase(uint32_t value, uint32_t alignment, uint32_t expected_result)
{
std::stringstream error_ss;
uint32_t result = roundup<uint32_t>(value, alignment);
if (result != expected_result)
{
error_ss << std::hex;
error_ss << "roundup(0x" << value << ", 0x" << alignment << ") returned: 0x" << result << " (expected: 0x" << expected_result << ")" << std::endl;
throw tc::Exception(error_ss.str());
}
}
void bn_binaryutils_TestClass::test_AlignFunc()
{
std::cout << "[tc::bn (BinaryUtils)] test_AlignFunc : " << std::flush;
try
{
try
{
util_AlignFuncTestCase(0, 0x200, 0x0);
util_AlignFuncTestCase(1, 0x200, 0x200);
util_AlignFuncTestCase(0x10, 0x200, 0x200);
util_AlignFuncTestCase(0x1FF, 0x200, 0x200);
util_AlignFuncTestCase(0x200, 0x200, 0x200);
util_AlignFuncTestCase(0x201, 0x200, 0x400);
util_AlignFuncTestCase(0x3FF, 0x200, 0x400);
util_AlignFuncTestCase(0xDEADBE00, 0x200, 0xDEADBE00);
util_AlignFuncTestCase(0xDEADBEEF, 0x200, 0xDEADC000);
std::cout << "PASS" << std::endl;
}
catch (const tc::Exception& e)
{
std::cout << "FAIL (" << e.error() << ")" << std::endl;
}
}
catch (const std::exception& e)
{
std::cout << "UNHANDLED EXCEPTION (" << e.what() << ")" << std::endl;
}
}
void bn_binaryutils_TestClass::util_AlignFuncTestCase(uint32_t value, uint32_t alignment, uint32_t expected_result)
{
std::stringstream error_ss;
uint32_t result = align<uint32_t>(value, alignment);
if (result != expected_result)
{
error_ss << std::hex;
error_ss << "align(0x" << value << ", 0x" << alignment << ") returned: 0x" << result << " (expected: 0x" << expected_result << ")" << std::endl;
throw tc::Exception(error_ss.str());
}
}
void bn_binaryutils_TestClass::test_MakeStructMagicU32Func()
{
std::cout << "[tc::bn (BinaryUtils)] test_MakeStructMagicU32Func : " << std::flush;
try
{
try
{
util_MakeStructMagicU32FuncTestCase("BABE", 0x45424142);
util_MakeStructMagicU32FuncTestCase("NEXT", 0x5458454E);
util_MakeStructMagicU32FuncTestCase("\x7F""ELF", 0x464C457F);
util_MakeStructMagicU32FuncTestCase("BIN0", 0x304E4942);
std::cout << "PASS" << std::endl;
}
catch (const tc::Exception& e)
{
std::cout << "FAIL (" << e.error() << ")" << std::endl;
}
}
catch (const std::exception& e)
{
std::cout << "UNHANDLED EXCEPTION (" << e.what() << ")" << std::endl;
}
}
void bn_binaryutils_TestClass::util_MakeStructMagicU32FuncTestCase(const char* struct_magic_str, uint32_t expected_result)
{
std::stringstream error_ss;
uint32_t result = tc::bn::make_struct_magic_uint32(struct_magic_str);
if (result != expected_result)
{
error_ss << std::hex;
error_ss << "make_struct_magic_uint32() returned: 0x" << result << " (expected: 0x" << expected_result << ")" << std::endl;
throw tc::Exception(error_ss.str());
}
}
void bn_binaryutils_TestClass::test_MakeStructMagicU64Func()
{
std::cout << "[tc::bn (BinaryUtils)] test_MakeStructMagicU64Func : " << std::flush;
try
{
try
{
util_MakeStructMagicU64FuncTestCase("HOMEBREW", 0x57455242454D4F48);
util_MakeStructMagicU64FuncTestCase("NEXTSPEC", 0x434550535458454E);
util_MakeStructMagicU64FuncTestCase("EMPTY\0\0\0", 0x0000005954504D45);
std::cout << "PASS" << std::endl;
}
catch (const tc::Exception& e)
{
std::cout << "FAIL (" << e.error() << ")" << std::endl;
}
}
catch (const std::exception& e)
{
std::cout << "UNHANDLED EXCEPTION (" << e.what() << ")" << std::endl;
}
}
void bn_binaryutils_TestClass::util_MakeStructMagicU64FuncTestCase(const char* struct_magic_str, uint64_t expected_result)
{
std::stringstream error_ss;
uint64_t result = tc::bn::make_struct_magic_uint64(struct_magic_str);
if (result != expected_result)
{
error_ss << std::hex;
error_ss << "make_struct_magic_uint32() returned: 0x" << result << " (expected: 0x" << expected_result << ")" << std::endl;
throw tc::Exception(error_ss.str());
}
}