mirror of
https://github.com/rvtr/TwlToolsRED.git
synced 2025-10-31 06:41:18 -04:00
アクセスログにファイルの改竄情報と、ファイル以外の情報も出力されるように変更
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlToolsRED@565 7061adef-622a-194b-ae81-725974e89856
This commit is contained in:
parent
de0d507536
commit
a7639b3055
@ -58,7 +58,7 @@ bool Checker::Diff( u32 g_offset, u32 g_size, u32 m_offset, u32 m_size, bool isD
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
function_result = false;
|
function_result = false; // 改竄フラグ
|
||||||
if( print_enable) {
|
if( print_enable) {
|
||||||
printf( " offset:0x%x ---> offset:0x%x(改竄されている)\n", g_offset, m_offset);
|
printf( " offset:0x%x ---> offset:0x%x(改竄されている)\n", g_offset, m_offset);
|
||||||
}
|
}
|
||||||
@ -72,7 +72,7 @@ bool Checker::Diff( u32 g_offset, u32 g_size, u32 m_offset, u32 m_size, bool isD
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
function_result = false;
|
function_result = false; // 改竄フラグ
|
||||||
if( print_enable) {
|
if( print_enable) {
|
||||||
printf( " size:0x%x ---> size:0x%x(改竄されている)\n", g_size, m_size);
|
printf( " size:0x%x ---> size:0x%x(改竄されている)\n", g_size, m_size);
|
||||||
}
|
}
|
||||||
@ -147,7 +147,6 @@ bool Checker::Diff( u32 g_offset, u32 g_size, u32 m_offset, u32 m_size, bool isD
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
function_result = false;
|
|
||||||
if( filled)
|
if( filled)
|
||||||
{
|
{
|
||||||
if( print_enable) {
|
if( print_enable) {
|
||||||
@ -156,6 +155,7 @@ bool Checker::Diff( u32 g_offset, u32 g_size, u32 m_offset, u32 m_size, bool isD
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
function_result = false; // 改竄フラグ
|
||||||
if( print_enable) {
|
if( print_enable) {
|
||||||
printf( " data:(改竄されている)\n");
|
printf( " data:(改竄されている)\n");
|
||||||
}
|
}
|
||||||
@ -169,8 +169,102 @@ bool Checker::Diff( u32 g_offset, u32 g_size, u32 m_offset, u32 m_size, bool isD
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Checker::AnalyzeBanner( RomHeader* gHeaderBuf, RomHeader* mHeaderBuf)
|
void Checker::AnalyzeHeader( RomHeader* gHeaderBuf, Entry* gEntry, RomHeader* mHeaderBuf, Entry* mEntry)
|
||||||
{
|
{
|
||||||
|
MyAreaEntry *tmpAreaEntry;
|
||||||
|
|
||||||
|
// genuine 領域を登録
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
gEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
gEntry->SetName( tmpAreaEntry, (char*)"A9-Static", 9);
|
||||||
|
tmpAreaEntry->top = (u32)(gHeaderBuf->arm9.romAddr);
|
||||||
|
tmpAreaEntry->bottom = (u32)(gHeaderBuf->arm9.romAddr + gHeaderBuf->arm9.romSize);
|
||||||
|
gEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
gEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
gEntry->SetName( tmpAreaEntry, (char*)"A7-Static", 9);
|
||||||
|
tmpAreaEntry->top = (u32)(gHeaderBuf->arm7.romAddr);
|
||||||
|
tmpAreaEntry->bottom = (u32)(gHeaderBuf->arm7.romAddr + gHeaderBuf->arm7.romSize);
|
||||||
|
gEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
gEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
gEntry->SetName( tmpAreaEntry, (char*)"FNT", 3);
|
||||||
|
tmpAreaEntry->top = (u32)(gHeaderBuf->fnt_offset);
|
||||||
|
tmpAreaEntry->bottom = (u32)((u32)(gHeaderBuf->fnt_offset) + gHeaderBuf->fnt_size);
|
||||||
|
gEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
gEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
gEntry->SetName( tmpAreaEntry, (char*)"FAT", 3);
|
||||||
|
tmpAreaEntry->top = (u32)(gHeaderBuf->fat_offset);
|
||||||
|
tmpAreaEntry->bottom = (u32)((u32)(gHeaderBuf->fat_offset) + gHeaderBuf->fat_size);
|
||||||
|
gEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
gEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
gEntry->SetName( tmpAreaEntry, (char*)"A9-OVT", 6);
|
||||||
|
tmpAreaEntry->top = (u32)(gHeaderBuf->main_ovt_offset);
|
||||||
|
tmpAreaEntry->bottom = (u32)((u32)(gHeaderBuf->main_ovt_offset) + gHeaderBuf->main_ovt_size);
|
||||||
|
gEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
gEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
gEntry->SetName( tmpAreaEntry, (char*)"A7-OVT", 6);
|
||||||
|
tmpAreaEntry->top = (u32)(gHeaderBuf->sub_ovt_offset);
|
||||||
|
tmpAreaEntry->bottom = (u32)((u32)(gHeaderBuf->sub_ovt_offset) + gHeaderBuf->sub_ovt_size);
|
||||||
|
gEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
|
||||||
|
|
||||||
|
// magicon 領域を登録
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
mEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
mEntry->SetName( tmpAreaEntry, (char*)"A9-Static", 9);
|
||||||
|
tmpAreaEntry->top = (u32)(mHeaderBuf->arm9.romAddr);
|
||||||
|
tmpAreaEntry->bottom = (u32)(mHeaderBuf->arm9.romAddr + mHeaderBuf->arm9.romSize);
|
||||||
|
mEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
mEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
mEntry->SetName( tmpAreaEntry, (char*)"A7-Static", 9);
|
||||||
|
tmpAreaEntry->top = (u32)(mHeaderBuf->arm7.romAddr);
|
||||||
|
tmpAreaEntry->bottom = (u32)(mHeaderBuf->arm7.romAddr + mHeaderBuf->arm7.romSize);
|
||||||
|
mEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
mEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
mEntry->SetName( tmpAreaEntry, (char*)"FNT", 3);
|
||||||
|
tmpAreaEntry->top = (u32)(mHeaderBuf->fnt_offset);
|
||||||
|
tmpAreaEntry->bottom = (u32)((u32)(mHeaderBuf->fnt_offset) + mHeaderBuf->fnt_size);
|
||||||
|
mEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
mEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
mEntry->SetName( tmpAreaEntry, (char*)"FAT", 3);
|
||||||
|
tmpAreaEntry->top = (u32)(mHeaderBuf->fat_offset);
|
||||||
|
tmpAreaEntry->bottom = (u32)((u32)(mHeaderBuf->fat_offset) + mHeaderBuf->fat_size);
|
||||||
|
mEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
mEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
mEntry->SetName( tmpAreaEntry, (char*)"A9-OVT", 6);
|
||||||
|
tmpAreaEntry->top = (u32)(mHeaderBuf->main_ovt_offset);
|
||||||
|
tmpAreaEntry->bottom = (u32)((u32)(mHeaderBuf->main_ovt_offset) + mHeaderBuf->main_ovt_size);
|
||||||
|
mEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
mEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
mEntry->SetName( tmpAreaEntry, (char*)"A7-OVT", 6);
|
||||||
|
tmpAreaEntry->top = (u32)(mHeaderBuf->sub_ovt_offset);
|
||||||
|
tmpAreaEntry->bottom = (u32)((u32)(mHeaderBuf->sub_ovt_offset) + mHeaderBuf->sub_ovt_size);
|
||||||
|
mEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Checker::AnalyzeBanner( RomHeader* gHeaderBuf, Entry* gEntry, RomHeader* mHeaderBuf, Entry* mEntry)
|
||||||
|
{
|
||||||
|
MyAreaEntry *tmpAreaEntry;
|
||||||
BannerHeader gBannerHeader;
|
BannerHeader gBannerHeader;
|
||||||
BannerHeader mBannerHeader;
|
BannerHeader mBannerHeader;
|
||||||
u32 banner_size[3] = {
|
u32 banner_size[3] = {
|
||||||
@ -199,15 +293,46 @@ void Checker::AnalyzeBanner( RomHeader* gHeaderBuf, RomHeader* mHeaderBuf)
|
|||||||
Diff( (u32)(gHeaderBuf->banner_offset) + sizeof(BannerHeader), banner_size[gBannerHeader.version],
|
Diff( (u32)(gHeaderBuf->banner_offset) + sizeof(BannerHeader), banner_size[gBannerHeader.version],
|
||||||
(u32)(mHeaderBuf->banner_offset) + sizeof(BannerHeader), banner_size[mBannerHeader.version],
|
(u32)(mHeaderBuf->banner_offset) + sizeof(BannerHeader), banner_size[mBannerHeader.version],
|
||||||
false, PRINT_LEVEL_1);
|
false, PRINT_LEVEL_1);
|
||||||
|
|
||||||
|
/* 領域を登録 */
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
gEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
gEntry->SetName( tmpAreaEntry, (char*)"BannerHeader", 12);
|
||||||
|
tmpAreaEntry->top = (u32)(gHeaderBuf->banner_offset);
|
||||||
|
tmpAreaEntry->bottom = (u32)(gHeaderBuf->banner_offset + sizeof(BannerHeader));
|
||||||
|
gEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
gEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
gEntry->SetName( tmpAreaEntry, (char*)"BannerBody", 10);
|
||||||
|
tmpAreaEntry->top = (u32)(gHeaderBuf->banner_offset + sizeof(BannerHeader));
|
||||||
|
tmpAreaEntry->bottom = (u32)(tmpAreaEntry->top + banner_size[gBannerHeader.version]);
|
||||||
|
gEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
mEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
mEntry->SetName( tmpAreaEntry, (char*)"BannerHeader", 12);
|
||||||
|
tmpAreaEntry->top = (u32)(mHeaderBuf->banner_offset);
|
||||||
|
tmpAreaEntry->bottom = (u32)(mHeaderBuf->banner_offset + sizeof(BannerHeader));
|
||||||
|
mEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
mEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
mEntry->SetName( tmpAreaEntry, (char*)"BannerBody", 10);
|
||||||
|
tmpAreaEntry->top = (u32)(mHeaderBuf->banner_offset + sizeof(BannerHeader));
|
||||||
|
tmpAreaEntry->bottom = (u32)(tmpAreaEntry->top + banner_size[mBannerHeader.version]);
|
||||||
|
mEntry->addAreaEntry( tmpAreaEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Checker::AnalyzeOverlay( RomHeader* gHeaderBuf, RomHeader* mHeaderBuf)
|
void Checker::AnalyzeOverlay( RomHeader* gHeaderBuf, Entry* gEntry, RomHeader* mHeaderBuf, Entry* mEntry)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int g_ovt_entries, m_ovt_entries;
|
int g_ovt_entries, m_ovt_entries;
|
||||||
long nowgfp, nowmfp;
|
long nowgfp, nowmfp;
|
||||||
ROM_OVT g_ovtBuf, m_ovtBuf;
|
ROM_OVT g_ovtBuf, m_ovtBuf;
|
||||||
ROM_FAT g_fatBuf, m_fatBuf;
|
ROM_FAT g_fatBuf, m_fatBuf;
|
||||||
|
MyAreaEntry *tmpAreaEntry;
|
||||||
|
char areaStr[32];
|
||||||
|
|
||||||
nowgfp = ftell( gfp);
|
nowgfp = ftell( gfp);
|
||||||
nowmfp = ftell( mfp);
|
nowmfp = ftell( mfp);
|
||||||
@ -235,6 +360,23 @@ void Checker::AnalyzeOverlay( RomHeader* gHeaderBuf, RomHeader* mHeaderBuf)
|
|||||||
Diff( (u32)(g_fatBuf.top), ((u32)(g_fatBuf.bottom) - (u32)(g_fatBuf.top)),
|
Diff( (u32)(g_fatBuf.top), ((u32)(g_fatBuf.bottom) - (u32)(g_fatBuf.top)),
|
||||||
(u32)(m_fatBuf.top), ((u32)(m_fatBuf.bottom) - (u32)(m_fatBuf.top)),
|
(u32)(m_fatBuf.top), ((u32)(m_fatBuf.bottom) - (u32)(m_fatBuf.top)),
|
||||||
false, PRINT_LEVEL_1);
|
false, PRINT_LEVEL_1);
|
||||||
|
|
||||||
|
// 領域を登録
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
gEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
sprintf( areaStr, "Arm9Overlay%d", i);
|
||||||
|
gEntry->SetName( tmpAreaEntry, areaStr, 11+((i/10)+1));
|
||||||
|
tmpAreaEntry->top = (u32)(g_fatBuf.top);
|
||||||
|
tmpAreaEntry->bottom = (u32)(g_fatBuf.bottom);
|
||||||
|
gEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
mEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
sprintf( areaStr, "Arm9Overlay%d", i);
|
||||||
|
mEntry->SetName( tmpAreaEntry, areaStr, 11+((i/10)+1));
|
||||||
|
tmpAreaEntry->top = (u32)(m_fatBuf.top);
|
||||||
|
tmpAreaEntry->bottom = (u32)(m_fatBuf.bottom);
|
||||||
|
mEntry->addAreaEntry( tmpAreaEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ARM7 Overlay
|
// ARM7 Overlay
|
||||||
@ -261,6 +403,23 @@ void Checker::AnalyzeOverlay( RomHeader* gHeaderBuf, RomHeader* mHeaderBuf)
|
|||||||
Diff( (u32)(g_fatBuf.top), ((u32)(g_fatBuf.bottom) - (u32)(g_fatBuf.top)),
|
Diff( (u32)(g_fatBuf.top), ((u32)(g_fatBuf.bottom) - (u32)(g_fatBuf.top)),
|
||||||
(u32)(m_fatBuf.top), ((u32)(m_fatBuf.bottom) - (u32)(m_fatBuf.top)),
|
(u32)(m_fatBuf.top), ((u32)(m_fatBuf.bottom) - (u32)(m_fatBuf.top)),
|
||||||
false, PRINT_LEVEL_1);
|
false, PRINT_LEVEL_1);
|
||||||
|
|
||||||
|
// 領域を登録
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
gEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
sprintf( areaStr, "Arm7Overlay%d", i);
|
||||||
|
gEntry->SetName( tmpAreaEntry, areaStr, 11+((i/10)+1));
|
||||||
|
tmpAreaEntry->top = (u32)(g_fatBuf.top);
|
||||||
|
tmpAreaEntry->bottom = (u32)(g_fatBuf.bottom);
|
||||||
|
gEntry->addAreaEntry( tmpAreaEntry);
|
||||||
|
|
||||||
|
tmpAreaEntry = (MyAreaEntry*)malloc( sizeof(MyAreaEntry));
|
||||||
|
mEntry->InitializeEntry( tmpAreaEntry);
|
||||||
|
sprintf( areaStr, "Arm7Overlay%d", i);
|
||||||
|
mEntry->SetName( tmpAreaEntry, areaStr, 11+((i/10)+1));
|
||||||
|
tmpAreaEntry->top = (u32)(m_fatBuf.top);
|
||||||
|
tmpAreaEntry->bottom = (u32)(m_fatBuf.bottom);
|
||||||
|
mEntry->addAreaEntry( tmpAreaEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ファイルポインタを戻す
|
// ファイルポインタを戻す
|
||||||
@ -522,6 +681,7 @@ void Checker::CheckAllEntries( Entry* gEntry, Entry* mEntry)
|
|||||||
hisEntry->top, (hisEntry->bottom - hisEntry->top),
|
hisEntry->top, (hisEntry->bottom - hisEntry->top),
|
||||||
false, PRINT_LEVEL_1) == false)
|
false, PRINT_LEVEL_1) == false)
|
||||||
{
|
{
|
||||||
|
currentEntry->modified = true; // 改竄フラグ
|
||||||
printf( "\n");
|
printf( "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -584,7 +744,11 @@ void Checker::FindAccessLogFile( Entry* entry, FILE* lfp)
|
|||||||
(GetOctValue(&logBuf[0x0D]) * 0x10000000));
|
(GetOctValue(&logBuf[0x0D]) * 0x10000000));
|
||||||
printf( "%d 0x%lx - 0x%lx", i, log_start_adr, log_end_adr);
|
printf( "%d 0x%lx - 0x%lx", i, log_start_adr, log_end_adr);
|
||||||
|
|
||||||
entry->FindFileLocation( log_start_adr, log_end_adr);
|
if( !(entry->FindFileLocation( log_start_adr, log_end_adr)))
|
||||||
|
{
|
||||||
|
entry->FindAreaLocation( log_start_adr, log_end_adr);
|
||||||
|
}
|
||||||
|
printf( "\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -47,11 +47,14 @@ class Checker
|
|||||||
|
|
||||||
void Finalize( void);
|
void Finalize( void);
|
||||||
|
|
||||||
|
/* ROMヘッダの各領域を管理リストに登録する */
|
||||||
|
void AnalyzeHeader( RomHeader* gHeaderBuf, Entry* gEntry, RomHeader* mHeaderBuf, Entry* mEntry);
|
||||||
|
|
||||||
/* ROMのバナー領域に対して Diff をかける */
|
/* ROMのバナー領域に対して Diff をかける */
|
||||||
void AnalyzeBanner( RomHeader* gHeaderBuf, RomHeader* mHeaderBuf);
|
void AnalyzeBanner( RomHeader* gHeaderBuf, Entry* gEntry, RomHeader* mHeaderBuf, Entry* mEntry);
|
||||||
|
|
||||||
/* Overlayテーブルに登録されている各ファイルに対して Diff をかける */
|
/* Overlayテーブルに登録されている各ファイルに対して Diff をかける */
|
||||||
void AnalyzeOverlay( RomHeader* gHeaderBuf, RomHeader* mHeaderBuf);
|
void AnalyzeOverlay( RomHeader* gHeaderBuf, Entry* gEntry, RomHeader* mHeaderBuf, Entry* mEntry);
|
||||||
|
|
||||||
/* FNT と FAT を解析して、各ファイルに対して Diff をかける */
|
/* FNT と FAT を解析して、各ファイルに対して Diff をかける */
|
||||||
bool AnalyzeFNT( RomHeader* headerBuf, FILE* fp, Entry* entry, PrintLevel print_enable);
|
bool AnalyzeFNT( RomHeader* headerBuf, FILE* fp, Entry* entry, PrintLevel print_enable);
|
||||||
|
|||||||
@ -8,6 +8,7 @@ void Entry::Initialize( void)
|
|||||||
{
|
{
|
||||||
dirEntry = NULL;
|
dirEntry = NULL;
|
||||||
fileEntry = NULL;
|
fileEntry = NULL;
|
||||||
|
areaEntry = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Entry::InitializeEntry( MyDirEntry* myDirEntry)
|
void Entry::InitializeEntry( MyDirEntry* myDirEntry)
|
||||||
@ -30,12 +31,23 @@ void Entry::InitializeEntry( MyFileEntry* myFileEntry)
|
|||||||
myFileEntry->full_path_name_length = 0;
|
myFileEntry->full_path_name_length = 0;
|
||||||
myFileEntry->top = 0;
|
myFileEntry->top = 0;
|
||||||
myFileEntry->bottom = 0;
|
myFileEntry->bottom = 0;
|
||||||
|
myFileEntry->modified = false;
|
||||||
myFileEntry->self_id = 0xFFFF;
|
myFileEntry->self_id = 0xFFFF;
|
||||||
myFileEntry->parent_id = 0;
|
myFileEntry->parent_id = 0;
|
||||||
myFileEntry->parent = NULL;
|
myFileEntry->parent = NULL;
|
||||||
myFileEntry->next = NULL;
|
myFileEntry->next = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Entry::InitializeEntry( MyAreaEntry* myAreaEntry)
|
||||||
|
{
|
||||||
|
myAreaEntry->name = NULL;
|
||||||
|
myAreaEntry->name_length = 0;
|
||||||
|
myAreaEntry->top = 0;
|
||||||
|
myAreaEntry->bottom = 0;
|
||||||
|
myAreaEntry->modified = false;
|
||||||
|
myAreaEntry->next = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void Entry::CopyEntry( MyDirEntry* dest, MyDirEntry* src)
|
void Entry::CopyEntry( MyDirEntry* dest, MyDirEntry* src)
|
||||||
{
|
{
|
||||||
memcpy( dest, src, sizeof(MyFileEntry));
|
memcpy( dest, src, sizeof(MyFileEntry));
|
||||||
@ -43,7 +55,7 @@ void Entry::CopyEntry( MyDirEntry* dest, MyDirEntry* src)
|
|||||||
|
|
||||||
void Entry::SetName( MyDirEntry* myDirEntry, char* fname, u16 len)
|
void Entry::SetName( MyDirEntry* myDirEntry, char* fname, u16 len)
|
||||||
{
|
{
|
||||||
myDirEntry->name = (char*)malloc( sizeof(MyDirEntry));
|
myDirEntry->name = (char*)malloc( FILE_NAME_LENGTH);
|
||||||
memset( myDirEntry->name, 0, len+1);
|
memset( myDirEntry->name, 0, len+1);
|
||||||
memcpy( myDirEntry->name, fname, len);
|
memcpy( myDirEntry->name, fname, len);
|
||||||
|
|
||||||
@ -59,6 +71,15 @@ void Entry::SetName( MyFileEntry* myFileEntry, char* fname, u16 len)
|
|||||||
myFileEntry->name_length = len;
|
myFileEntry->name_length = len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Entry::SetName( MyAreaEntry* myAreaEntry, char* fname, u16 len)
|
||||||
|
{
|
||||||
|
myAreaEntry->name = (char*)malloc( FILE_NAME_LENGTH);
|
||||||
|
memset( myAreaEntry->name, 0, len+1);
|
||||||
|
memcpy( myAreaEntry->name, fname, len);
|
||||||
|
|
||||||
|
myAreaEntry->name_length = len;
|
||||||
|
}
|
||||||
|
|
||||||
void Entry::addDirEntry( MyDirEntry* myDirEntry)
|
void Entry::addDirEntry( MyDirEntry* myDirEntry)
|
||||||
{
|
{
|
||||||
MyDirEntry *currentEntry = dirEntry;
|
MyDirEntry *currentEntry = dirEntry;
|
||||||
@ -92,6 +113,23 @@ void Entry::addFileEntry( MyFileEntry* myFileEntry)
|
|||||||
myFileEntry->next = NULL;
|
myFileEntry->next = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Entry::addAreaEntry( MyAreaEntry* myAreaEntry)
|
||||||
|
{
|
||||||
|
MyAreaEntry *currentEntry = areaEntry;
|
||||||
|
// printf( "%s, 0x%lx, 0x%lx\n", myAreaEntry->name, myAreaEntry->top, myAreaEntry->bottom);
|
||||||
|
if( !currentEntry)
|
||||||
|
{
|
||||||
|
areaEntry = myAreaEntry;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
while( currentEntry->next)
|
||||||
|
{
|
||||||
|
currentEntry = (MyAreaEntry*)(currentEntry->next);
|
||||||
|
}
|
||||||
|
currentEntry->next = myAreaEntry;
|
||||||
|
myAreaEntry->next = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
MyDirEntry* Entry::FindDirEntry( u16 id)
|
MyDirEntry* Entry::FindDirEntry( u16 id)
|
||||||
{
|
{
|
||||||
@ -161,14 +199,35 @@ MyFileEntry* Entry::FindFileLocation( u32 start_adr, u32 end_adr)
|
|||||||
MyFileEntry *currentEntry = fileEntry;
|
MyFileEntry *currentEntry = fileEntry;
|
||||||
while( currentEntry)
|
while( currentEntry)
|
||||||
{
|
{
|
||||||
if( ((currentEntry->top <= start_adr)&&(currentEntry->bottom >= start_adr)) ||
|
if( ((currentEntry->top <= start_adr)&&(currentEntry->bottom > start_adr)) ||
|
||||||
((currentEntry->top <= end_adr)&&(currentEntry->bottom >= end_adr)))
|
((currentEntry->top <= end_adr)&&(currentEntry->bottom > end_adr)))
|
||||||
{
|
{
|
||||||
printf( " %s,", currentEntry->full_path_name);
|
if( currentEntry->modified)
|
||||||
|
{ // 改竄されているファイルの識別表示
|
||||||
|
printf( " %s(*),", currentEntry->full_path_name);
|
||||||
|
}else{
|
||||||
|
printf( " %s,", currentEntry->full_path_name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
currentEntry = (MyFileEntry*)(currentEntry->next);
|
currentEntry = (MyFileEntry*)(currentEntry->next);
|
||||||
}
|
}
|
||||||
printf( "\n");
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* アドレスの範囲に該当するエリアを表示する */
|
||||||
|
MyAreaEntry* Entry::FindAreaLocation( u32 start_adr, u32 end_adr)
|
||||||
|
{
|
||||||
|
MyAreaEntry *currentEntry = areaEntry;
|
||||||
|
while( currentEntry)
|
||||||
|
{
|
||||||
|
if( ((currentEntry->top <= start_adr)&&(currentEntry->bottom > start_adr)) ||
|
||||||
|
((currentEntry->top <= end_adr)&&(currentEntry->bottom > end_adr)))
|
||||||
|
{
|
||||||
|
printf( " %s,", currentEntry->name);
|
||||||
|
}
|
||||||
|
currentEntry = (MyAreaEntry*)(currentEntry->next);
|
||||||
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -29,12 +29,23 @@ typedef struct
|
|||||||
u8 full_path_name_length;
|
u8 full_path_name_length;
|
||||||
u32 top;
|
u32 top;
|
||||||
u32 bottom;
|
u32 bottom;
|
||||||
|
bool modified;
|
||||||
u16 self_id;
|
u16 self_id;
|
||||||
u16 parent_id;
|
u16 parent_id;
|
||||||
void* parent;
|
void* parent;
|
||||||
void* next;
|
void* next;
|
||||||
} MyFileEntry;
|
} MyFileEntry;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char* name;
|
||||||
|
u8 name_length;
|
||||||
|
u32 top;
|
||||||
|
u32 bottom;
|
||||||
|
bool modified;
|
||||||
|
void* next;
|
||||||
|
} MyAreaEntry;
|
||||||
|
|
||||||
|
|
||||||
class Entry
|
class Entry
|
||||||
{
|
{
|
||||||
@ -42,20 +53,24 @@ class Entry
|
|||||||
public:
|
public:
|
||||||
MyDirEntry* dirEntry;
|
MyDirEntry* dirEntry;
|
||||||
MyFileEntry* fileEntry;
|
MyFileEntry* fileEntry;
|
||||||
|
MyAreaEntry* areaEntry;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void Initialize( void);
|
void Initialize( void);
|
||||||
|
|
||||||
void InitializeEntry( MyDirEntry* myDirEntry);
|
void InitializeEntry( MyDirEntry* myDirEntry);
|
||||||
void InitializeEntry( MyFileEntry* myFileEntry);
|
void InitializeEntry( MyFileEntry* myFileEntry);
|
||||||
|
void InitializeEntry( MyAreaEntry* myAreaEntry);
|
||||||
|
|
||||||
void CopyEntry( MyDirEntry* dest, MyDirEntry* src);
|
void CopyEntry( MyDirEntry* dest, MyDirEntry* src);
|
||||||
|
|
||||||
void SetName( MyDirEntry* myDirEntry, char* fname, u16 len);
|
void SetName( MyDirEntry* myDirEntry, char* fname, u16 len);
|
||||||
void SetName( MyFileEntry* myDirEntry, char* fname, u16 len);
|
void SetName( MyFileEntry* myFileEntry, char* fname, u16 len);
|
||||||
|
void SetName( MyAreaEntry* myAreaEntry, char* fname, u16 len);
|
||||||
|
|
||||||
void addDirEntry( MyDirEntry* myDirEntry);
|
void addDirEntry( MyDirEntry* myDirEntry);
|
||||||
void addFileEntry( MyFileEntry* myFileEntry);
|
void addFileEntry( MyFileEntry* myFileEntry);
|
||||||
|
void addAreaEntry( MyAreaEntry* myAreaEntry);
|
||||||
|
|
||||||
MyDirEntry* FindDirEntry( u16 id);
|
MyDirEntry* FindDirEntry( u16 id);
|
||||||
MyFileEntry* FindFileEntry( u16 id);
|
MyFileEntry* FindFileEntry( u16 id);
|
||||||
@ -65,7 +80,8 @@ class Entry
|
|||||||
|
|
||||||
/* アドレスの範囲に該当するファイルを表示する */
|
/* アドレスの範囲に該当するファイルを表示する */
|
||||||
MyFileEntry* FindFileLocation( u32 start_adr, u32 end_adr);
|
MyFileEntry* FindFileLocation( u32 start_adr, u32 end_adr);
|
||||||
|
/* アドレスの範囲に該当するエリアを表示する */
|
||||||
|
MyAreaEntry* FindAreaLocation( u32 start_adr, u32 end_adr);
|
||||||
|
|
||||||
/* parent リンクを繋げる */
|
/* parent リンクを繋げる */
|
||||||
void FollowParent( void);
|
void FollowParent( void);
|
||||||
|
|||||||
@ -86,6 +86,8 @@ int main (int argc, char *argv[])
|
|||||||
|
|
||||||
checker.Initialize( gfp, mfp, gBuf, mBuf, BUFFER_SIZE);
|
checker.Initialize( gfp, mfp, gBuf, mBuf, BUFFER_SIZE);
|
||||||
checker.LoadHeader( &gHeaderBuf, &mHeaderBuf);
|
checker.LoadHeader( &gHeaderBuf, &mHeaderBuf);
|
||||||
|
|
||||||
|
checker.AnalyzeHeader( &gHeaderBuf, &gEntry, &mHeaderBuf, &mEntry);
|
||||||
|
|
||||||
printf( "------------------\n");
|
printf( "------------------\n");
|
||||||
printf( "Nitro Rom Header\n");
|
printf( "Nitro Rom Header\n");
|
||||||
@ -141,10 +143,10 @@ int main (int argc, char *argv[])
|
|||||||
printf( "------------------\n");
|
printf( "------------------\n");
|
||||||
|
|
||||||
printf( "\nBanner\n");
|
printf( "\nBanner\n");
|
||||||
checker.AnalyzeBanner( &gHeaderBuf, &mHeaderBuf);
|
checker.AnalyzeBanner( &gHeaderBuf, &gEntry, &mHeaderBuf, &mEntry);
|
||||||
|
|
||||||
printf( "\nOverlay\n");
|
printf( "\nOverlay\n");
|
||||||
checker.AnalyzeOverlay( &gHeaderBuf, &mHeaderBuf);
|
checker.AnalyzeOverlay( &gHeaderBuf, &gEntry, &mHeaderBuf, &mEntry);
|
||||||
|
|
||||||
printf( "\nFNT & FAT\n");
|
printf( "\nFNT & FAT\n");
|
||||||
checker.AnalyzeFNT( &gHeaderBuf, gfp, &gEntry, PRINT_LEVEL_0);
|
checker.AnalyzeFNT( &gHeaderBuf, gfp, &gEntry, PRINT_LEVEL_0);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user