Finaler Stand Projekt 2 - es läuft jetzt

This commit is contained in:
Yannik Baumgärtner 2025-11-26 19:16:53 +01:00
parent 79396ac2c7
commit b5c8152b18
5 changed files with 332 additions and 8 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

View File

@ -3,20 +3,214 @@
#include <string.h>
#include "imageInput.h"
// Größe eines temporären Puffers
#define BUFFER_SIZE 100
// Fester Header-String, der am Anfang jeder gültigen Bilddatei stehen muss
#define FILE_HEADER_STRING "__info2_image_file_format__"
// TODO Implementieren Sie geeignete Hilfsfunktionen für das Lesen der Bildserie aus einer Datei
// TODO Vervollständigen Sie die Funktion readImages unter Benutzung Ihrer Hilfsfunktionen
GrayScaleImageSeries *readImages(const char *path)
/*
* Prüft den Dateiheader und liest Bildanzahl, Breite und Höhe aus.
* Gibt 1 (true) zurück, wenn alles gültig ist, sonst 0 (false).
*/
static int checkheader(FILE *path, unsigned short *count, unsigned short *width, unsigned short *height)
{
GrayScaleImageSeries *series = NULL;
unsigned int headerlen = strlen(FILE_HEADER_STRING);
unsigned char header[64];
// Prüfen, ob der Header-String in den Puffer passt
if (headerlen >= sizeof(header))
{
return 0;
}
// Header aus Datei lesen muss exakt gleich lang sein
if (fread(header, 1, headerlen, path) != headerlen)
{
return 0;
}
// Header vergleichen Datei muss mit FILE_HEADER_STRING beginnen
if (strncmp((char *)header, FILE_HEADER_STRING, headerlen) != 0)
{
return 0;
}
// Danach folgen im File: count, width, height (je 2 Bytes)
if (fread(count, sizeof(unsigned short), 1, path) != 1)
return 0;
if (fread(width, sizeof(unsigned short), 1, path) != 1)
return 0;
if (fread(height, sizeof(unsigned short), 1, path) != 1)
return 0;
return 1;
}
/*
* Reserviert Speicher für eine Serie von Graustufenbildern.
* Legt:
* - Hauptstruktur
* - Array von Bildern
* - Array von Labels
* - Für jedes Bild einen Pixelpuffer
* an.
*/
static GrayScaleImageSeries *allocateSeries(unsigned short count, unsigned short width, unsigned short height)
{
// Platz für die Gesamtstruktur anfordern
GrayScaleImageSeries *series = malloc(sizeof(GrayScaleImageSeries));
if (series == NULL)
{
return NULL;
}
series->count = count;
// Arrays für Bilder und Labels anlegen
series->images = calloc(count, sizeof(GrayScaleImage));
series->labels = calloc(count, sizeof(unsigned char));
if (series->images == NULL || series->labels == NULL)
{
return NULL;
}
// Jedem Bild Höhe, Breite und einen eigenen Pixelpuffer zuweisen
for (unsigned int i = 0; i < count; i++)
{
series->images[i].height = height;
series->images[i].width = width;
// Für jedes Bild einen Puffer anlegen: width * height Pixel
series->images[i].buffer = calloc(height * width, sizeof(GrayScalePixelType));
if (series->images[i].buffer == NULL)
{
// Falls ein Puffer fehlschlägt → alles bisherige wieder freigeben
clearSeries(series);
return NULL;
}
}
return series;
}
// TODO Vervollständigen Sie die Funktion clearSeries, welche eine Bildserie vollständig aus dem Speicher freigibt
/*
* Liest die Pixeldaten und Labels aller Bilder aus der Datei.
* Reihenfolge in der Datei je Bild:
* 1. Pixelwerte (width*height Stück)
* 2. 1 Byte Label
*/
static int loadImageData(FILE *file, GrayScaleImageSeries *series, unsigned short count, unsigned short width, unsigned short height)
{
for (unsigned int i = 0; i < count; i++)
{
size_t pixelCount = width * height;
// Pixeldaten in den Bildpuffer schreiben
if (fread(series->images[i].buffer, sizeof(GrayScalePixelType), pixelCount, file) != pixelCount)
{
return 0;
}
// Label lesen (1 Byte)
if (fread(&series->labels[i], sizeof(unsigned char), 1, file) != 1)
{
return 0;
}
}
return 1;
}
// Schliesst eine Datei, sofern sie geöffnet ist
static void closefile(FILE *file)
{
if (file != NULL)
{
fclose(file);
}
}
/*
* Hauptfunktion zum Einlesen der Bilddaten:
* 1. Datei öffnen
* 2. Header + Metadaten lesen
* 3. Speicher anlegen
* 4. Pixeldaten + Labels laden
* 5. Datei schließen
* 6. Zeiger auf fertige Daten zurückgeben
*/
GrayScaleImageSeries *readImages(const char *path)
{
unsigned short count, width, height;
GrayScaleImageSeries *series = NULL;
// Datei im binären Modus öffnen
FILE *file = fopen(path, "rb");
if (file == NULL)
{
return NULL;
}
// Header überprüfen und Metadaten lesen
if (!checkheader(file, &count, &width, &height))
{
closefile(file);
return NULL;
}
// Speicher für Serie anlegen
series = allocateSeries(count, width, height);
if (series == NULL)
{
closefile(file);
return NULL;
}
// Bilddaten laden
if (!loadImageData(file, series, count, width, height))
{
clearSeries(series);
closefile(file);
return NULL;
}
// Datei schließen und fertige Struktur zurückgeben
closefile(file);
return series;
}
/*
* Gibt den gesamten reservierten Speicher der Bildserie wieder frei.
* Dazu:
* - alle Pixelpuffer
* - Bilderarray
* - Labelsarray
* - Hauptstruktur
*/
void clearSeries(GrayScaleImageSeries *series)
{
}
if (series != NULL)
{
// Erst alle Bildpuffer freigeben
for (unsigned int i = 0; i < series->count; i++)
{
free(series->images[i].buffer);
}
// Danach Arrays freigeben
free(series->images);
free(series->labels);
// Am Ende die Struktur selbst
free(series);
}
// count, width, height müssen nicht auf 0 gesetzt werden,
// da sie bei einer Neu-Allokation sowieso überschrieben werden.
}

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleIdentifier</key>
<string>com.apple.xcode.dsym.runImageInputTests</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>dSYM</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>

View File

@ -0,0 +1,110 @@
---
triple: 'x86_64-apple-darwin'
binary-path: runImageInputTests
relocations:
- { offset: 0x26, size: 0x8, addend: 0x0, symName: _test_readImagesReturnsCorrectNumberOfImages, symObjAddr: 0x0, symBinAddr: 0x100000A80, symSize: 0xB0 }
- { offset: 0x6E, size: 0x8, addend: 0x0, symName: _test_readImagesReturnsCorrectNumberOfImages, symObjAddr: 0x0, symBinAddr: 0x100000A80, symSize: 0xB0 }
- { offset: 0xAE, size: 0x8, addend: 0x0, symName: _prepareImageFile, symObjAddr: 0xB0, symBinAddr: 0x100000B30, symSize: 0x160 }
- { offset: 0x15E, size: 0x8, addend: 0x0, symName: _test_readImagesReturnsCorrectImageWidth, symObjAddr: 0x210, symBinAddr: 0x100000C90, symSize: 0x130 }
- { offset: 0x19E, size: 0x8, addend: 0x0, symName: _test_readImagesReturnsCorrectImageHeight, symObjAddr: 0x340, symBinAddr: 0x100000DC0, symSize: 0x130 }
- { offset: 0x1DE, size: 0x8, addend: 0x0, symName: _test_readImagesReturnsCorrectLabels, symObjAddr: 0x470, symBinAddr: 0x100000EF0, symSize: 0x130 }
- { offset: 0x23A, size: 0x8, addend: 0x0, symName: _test_readImagesReturnsNullOnNotExistingPath, symObjAddr: 0x5A0, symBinAddr: 0x100001020, symSize: 0x50 }
- { offset: 0x25E, size: 0x8, addend: 0x0, symName: _test_readImagesFailsOnWrongFileTag, symObjAddr: 0x5F0, symBinAddr: 0x100001070, symSize: 0x90 }
- { offset: 0x290, size: 0x8, addend: 0x0, symName: _setUp, symObjAddr: 0x680, symBinAddr: 0x100001100, symSize: 0x10 }
- { offset: 0x2A5, size: 0x8, addend: 0x0, symName: _tearDown, symObjAddr: 0x690, symBinAddr: 0x100001110, symSize: 0x10 }
- { offset: 0x2BA, size: 0x8, addend: 0x0, symName: _main, symObjAddr: 0x6A0, symBinAddr: 0x100001120, symSize: 0xC4 }
- { offset: 0x569, size: 0x8, addend: 0x0, symName: _readImages, symObjAddr: 0x0, symBinAddr: 0x1000011F0, symSize: 0x120 }
- { offset: 0x58A, size: 0x8, addend: 0x0, symName: _readImages, symObjAddr: 0x0, symBinAddr: 0x1000011F0, symSize: 0x120 }
- { offset: 0x5F8, size: 0x8, addend: 0x0, symName: _checkheader, symObjAddr: 0x120, symBinAddr: 0x100001310, symSize: 0x160 }
- { offset: 0x66C, size: 0x8, addend: 0x0, symName: _closefile, symObjAddr: 0x280, symBinAddr: 0x100001470, symSize: 0x30 }
- { offset: 0x690, size: 0x8, addend: 0x0, symName: _allocateSeries, symObjAddr: 0x2B0, symBinAddr: 0x1000014A0, symSize: 0x180 }
- { offset: 0x6FE, size: 0x8, addend: 0x0, symName: _loadImageData, symObjAddr: 0x430, symBinAddr: 0x100001620, symSize: 0xE0 }
- { offset: 0x796, size: 0x8, addend: 0x0, symName: _clearSeries, symObjAddr: 0x510, symBinAddr: 0x100001700, symSize: 0x7D }
- { offset: 0xAB0, size: 0x8, addend: 0x0, symName: _UnityPrint, symObjAddr: 0x0, symBinAddr: 0x100001780, symSize: 0x60 }
- { offset: 0xAC9, size: 0x8, addend: 0x0, symName: _UnityStrOk, symObjAddr: 0x4390, symBinAddr: 0x100005CD0, symSize: 0x0 }
- { offset: 0xAFD, size: 0x8, addend: 0x0, symName: _UnityStrPass, symObjAddr: 0x4393, symBinAddr: 0x100005CD3, symSize: 0x0 }
- { offset: 0xB1E, size: 0x8, addend: 0x0, symName: _UnityStrFail, symObjAddr: 0x4398, symBinAddr: 0x100005CD8, symSize: 0x0 }
- { offset: 0xB33, size: 0x8, addend: 0x0, symName: _UnityStrIgnore, symObjAddr: 0x439D, symBinAddr: 0x100005CDD, symSize: 0x0 }
- { offset: 0xB54, size: 0x8, addend: 0x0, symName: _UnityStrErrShorthand, symObjAddr: 0x43B0, symBinAddr: 0x100005CF0, symSize: 0x0 }
- { offset: 0xB75, size: 0x8, addend: 0x0, symName: _UnityStrErrFloat, symObjAddr: 0x43E0, symBinAddr: 0x100005D20, symSize: 0x0 }
- { offset: 0xB96, size: 0x8, addend: 0x0, symName: _UnityStrErrDouble, symObjAddr: 0x4400, symBinAddr: 0x100005D40, symSize: 0x0 }
- { offset: 0xBB7, size: 0x8, addend: 0x0, symName: _UnityStrErr64, symObjAddr: 0x4420, symBinAddr: 0x100005D60, symSize: 0x0 }
- { offset: 0xBCC, size: 0x8, addend: 0x0, symName: _UnityStrErrDetailStack, symObjAddr: 0x4440, symBinAddr: 0x100005D80, symSize: 0x0 }
- { offset: 0xBE1, size: 0x8, addend: 0x0, symName: _UnityPrintFloat, symObjAddr: 0x5D0, symBinAddr: 0x100001D50, symSize: 0x6D0 }
- { offset: 0xC04, size: 0x8, addend: 0x0, symName: _UnityPrintFloat.sig_digits, symObjAddr: 0x4464, symBinAddr: 0x100005DA4, symSize: 0x0 }
- { offset: 0xC1A, size: 0x8, addend: 0x0, symName: _UnityPrintFloat.min_scaled, symObjAddr: 0x4468, symBinAddr: 0x100005DA8, symSize: 0x0 }
- { offset: 0xC30, size: 0x8, addend: 0x0, symName: _UnityPrintFloat.max_scaled, symObjAddr: 0x446C, symBinAddr: 0x100005DAC, symSize: 0x0 }
- { offset: 0xE00, size: 0x8, addend: 0x0, symName: _Unity, symBinAddr: 0x100007008, symSize: 0x0 }
- { offset: 0xEE8, size: 0x8, addend: 0x0, symName: _UnityQuickCompare, symObjAddr: 0xAE68, symBinAddr: 0x100007000, symSize: 0x0 }
- { offset: 0xF81, size: 0x8, addend: 0x0, symName: _UnityStrExpected, symObjAddr: 0x4470, symBinAddr: 0x100005DB0, symSize: 0x0 }
- { offset: 0xFA2, size: 0x8, addend: 0x0, symName: _UnityStrWas, symObjAddr: 0x447B, symBinAddr: 0x100005DBB, symSize: 0x0 }
- { offset: 0xFC3, size: 0x8, addend: 0x0, symName: _UnityStrSpacer, symObjAddr: 0x4605, symBinAddr: 0x100005F45, symSize: 0x0 }
- { offset: 0xFD8, size: 0x8, addend: 0x0, symName: _UnityStrDetail1Name, symObjAddr: 0x4608, symBinAddr: 0x100005F48, symSize: 0x0 }
- { offset: 0xFF9, size: 0x8, addend: 0x0, symName: _UnityStrDetail2Name, symObjAddr: 0x4612, symBinAddr: 0x100005F52, symSize: 0x0 }
- { offset: 0x100E, size: 0x8, addend: 0x0, symName: _UnityStrGt, symObjAddr: 0x4490, symBinAddr: 0x100005DD0, symSize: 0x0 }
- { offset: 0x102F, size: 0x8, addend: 0x0, symName: _UnityStrLt, symObjAddr: 0x44B0, symBinAddr: 0x100005DF0, symSize: 0x0 }
- { offset: 0x1050, size: 0x8, addend: 0x0, symName: _UnityStrOrEqual, symObjAddr: 0x44C2, symBinAddr: 0x100005E02, symSize: 0x0 }
- { offset: 0x1071, size: 0x8, addend: 0x0, symName: _UnityStrNotEqual, symObjAddr: 0x44D0, symBinAddr: 0x100005E10, symSize: 0x0 }
- { offset: 0x1086, size: 0x8, addend: 0x0, symName: _UnityStrPointless, symObjAddr: 0x44F0, symBinAddr: 0x100005E30, symSize: 0x0 }
- { offset: 0x10A7, size: 0x8, addend: 0x0, symName: _UnityStrNullPointerForExpected, symObjAddr: 0x4620, symBinAddr: 0x100005F60, symSize: 0x0 }
- { offset: 0x10C8, size: 0x8, addend: 0x0, symName: _UnityStrNullPointerForActual, symObjAddr: 0x4640, symBinAddr: 0x100005F80, symSize: 0x0 }
- { offset: 0x10E9, size: 0x8, addend: 0x0, symName: _UnityStrElement, symObjAddr: 0x4527, symBinAddr: 0x100005E67, symSize: 0x0 }
- { offset: 0x10FE, size: 0x8, addend: 0x0, symName: _UnityStrInf, symObjAddr: 0x4531, symBinAddr: 0x100005E71, symSize: 0x0 }
- { offset: 0x111F, size: 0x8, addend: 0x0, symName: _UnityStrNegInf, symObjAddr: 0x4540, symBinAddr: 0x100005E80, symSize: 0x0 }
- { offset: 0x1134, size: 0x8, addend: 0x0, symName: _UnityStrNaN, symObjAddr: 0x4552, symBinAddr: 0x100005E92, symSize: 0x0 }
- { offset: 0x1155, size: 0x8, addend: 0x0, symName: _UnityStrDet, symObjAddr: 0x4556, symBinAddr: 0x100005E96, symSize: 0x0 }
- { offset: 0x1176, size: 0x8, addend: 0x0, symName: _UnityStrInvalidFloatTrait, symObjAddr: 0x4570, symBinAddr: 0x100005EB0, symSize: 0x0 }
- { offset: 0x1197, size: 0x8, addend: 0x0, symName: _UnityStrNot, symObjAddr: 0x4584, symBinAddr: 0x100005EC4, symSize: 0x0 }
- { offset: 0x11AC, size: 0x8, addend: 0x0, symName: _UnityStrDelta, symObjAddr: 0x4590, symBinAddr: 0x100005ED0, symSize: 0x0 }
- { offset: 0x11CD, size: 0x8, addend: 0x0, symName: _UnityStrNull, symObjAddr: 0x4659, symBinAddr: 0x100005F99, symSize: 0x0 }
- { offset: 0x11E2, size: 0x8, addend: 0x0, symName: _UnityStrMemory, symObjAddr: 0x45B0, symBinAddr: 0x100005EF0, symSize: 0x0 }
- { offset: 0x11F7, size: 0x8, addend: 0x0, symName: _UnityStrByte, symObjAddr: 0x45C2, symBinAddr: 0x100005F02, symSize: 0x0 }
- { offset: 0x120C, size: 0x8, addend: 0x0, symName: _UnityStrBreaker, symObjAddr: 0x45D0, symBinAddr: 0x100005F10, symSize: 0x0 }
- { offset: 0x122D, size: 0x8, addend: 0x0, symName: _UnityStrResultsTests, symObjAddr: 0x45E8, symBinAddr: 0x100005F28, symSize: 0x0 }
- { offset: 0x124E, size: 0x8, addend: 0x0, symName: _UnityStrResultsFailures, symObjAddr: 0x45F0, symBinAddr: 0x100005F30, symSize: 0x0 }
- { offset: 0x1263, size: 0x8, addend: 0x0, symName: _UnityStrResultsIgnored, symObjAddr: 0x45FB, symBinAddr: 0x100005F3B, symSize: 0x0 }
- { offset: 0x13DC, size: 0x8, addend: 0x0, symName: _UnityPrint, symObjAddr: 0x0, symBinAddr: 0x100001780, symSize: 0x60 }
- { offset: 0x140E, size: 0x8, addend: 0x0, symName: _UnityPrintChar, symObjAddr: 0x60, symBinAddr: 0x1000017E0, symSize: 0xD0 }
- { offset: 0x1432, size: 0x8, addend: 0x0, symName: _UnityPrintLen, symObjAddr: 0x130, symBinAddr: 0x1000018B0, symSize: 0x130 }
- { offset: 0x1472, size: 0x8, addend: 0x0, symName: _UnityPrintNumberHex, symObjAddr: 0x260, symBinAddr: 0x1000019E0, symSize: 0x90 }
- { offset: 0x14C5, size: 0x8, addend: 0x0, symName: _UnityPrintIntNumberByStyle, symObjAddr: 0x2F0, symBinAddr: 0x100001A70, symSize: 0x100 }
- { offset: 0x14F7, size: 0x8, addend: 0x0, symName: _UnityPrintNumber, symObjAddr: 0x3F0, symBinAddr: 0x100001B70, symSize: 0x50 }
- { offset: 0x1529, size: 0x8, addend: 0x0, symName: _UnityPrintUintNumberByStyle, symObjAddr: 0x440, symBinAddr: 0x100001BC0, symSize: 0x60 }
- { offset: 0x155B, size: 0x8, addend: 0x0, symName: _UnityPrintNumberUnsigned, symObjAddr: 0x4A0, symBinAddr: 0x100001C20, symSize: 0x90 }
- { offset: 0x1590, size: 0x8, addend: 0x0, symName: _UnityPrintMask, symObjAddr: 0x530, symBinAddr: 0x100001CB0, symSize: 0xA0 }
- { offset: 0x1673, size: 0x8, addend: 0x0, symName: _UnityConcludeTest, symObjAddr: 0xCA0, symBinAddr: 0x100002420, symSize: 0xC0 }
- { offset: 0x1689, size: 0x8, addend: 0x0, symName: _UnityTestResultsBegin, symObjAddr: 0xD60, symBinAddr: 0x1000024E0, symSize: 0x60 }
- { offset: 0x16BE, size: 0x8, addend: 0x0, symName: _UnityAssertBits, symObjAddr: 0xDC0, symBinAddr: 0x100002540, symSize: 0xE0 }
- { offset: 0x1720, size: 0x8, addend: 0x0, symName: _UnityTestResultsFailBegin, symObjAddr: 0xEA0, symBinAddr: 0x100002620, symSize: 0x40 }
- { offset: 0x1746, size: 0x8, addend: 0x0, symName: _UnityAddMsgIfSpecified, symObjAddr: 0xEE0, symBinAddr: 0x100002660, symSize: 0xA0 }
- { offset: 0x176C, size: 0x8, addend: 0x0, symName: _UnityAssertEqualIntNumber, symObjAddr: 0xF80, symBinAddr: 0x100002700, symSize: 0xD0 }
- { offset: 0x17CE, size: 0x8, addend: 0x0, symName: _UnityAssertEqualUintNumber, symObjAddr: 0x1050, symBinAddr: 0x1000027D0, symSize: 0xD0 }
- { offset: 0x1830, size: 0x8, addend: 0x0, symName: _UnityAssertIntGreaterOrLessOrEqualNumber, symObjAddr: 0x1120, symBinAddr: 0x1000028A0, symSize: 0x1A0 }
- { offset: 0x18B0, size: 0x8, addend: 0x0, symName: _UnityAssertUintGreaterOrLessOrEqualNumber, symObjAddr: 0x12C0, symBinAddr: 0x100002A40, symSize: 0x1A0 }
- { offset: 0x1930, size: 0x8, addend: 0x0, symName: _UnityAssertEqualIntArray, symObjAddr: 0x1460, symBinAddr: 0x100002BE0, symSize: 0x3C0 }
- { offset: 0x1A28, size: 0x8, addend: 0x0, symName: _UnityIsOneArrayNull, symObjAddr: 0x1820, symBinAddr: 0x100002FA0, symSize: 0xB0 }
- { offset: 0x1A7F, size: 0x8, addend: 0x0, symName: _UnityAssertWithinFloatArray, symObjAddr: 0x18D0, symBinAddr: 0x100003050, symSize: 0x460 }
- { offset: 0x1C09, size: 0x8, addend: 0x0, symName: _UnityFloatsWithin, symObjAddr: 0x1D30, symBinAddr: 0x1000034B0, symSize: 0x5F0 }
- { offset: 0x1E8D, size: 0x8, addend: 0x0, symName: _UnityAssertFloatsWithin, symObjAddr: 0x2320, symBinAddr: 0x100003AA0, symSize: 0xE0 }
- { offset: 0x1EEF, size: 0x8, addend: 0x0, symName: _UnityAssertFloatsNotWithin, symObjAddr: 0x2400, symBinAddr: 0x100003B80, symSize: 0xE0 }
- { offset: 0x1F51, size: 0x8, addend: 0x0, symName: _UnityAssertGreaterOrLessFloat, symObjAddr: 0x24E0, symBinAddr: 0x100003C60, symSize: 0x1A0 }
- { offset: 0x1FC2, size: 0x8, addend: 0x0, symName: _UnityAssertFloatSpecial, symObjAddr: 0x2680, symBinAddr: 0x100003E00, symSize: 0x600 }
- { offset: 0x21AC, size: 0x8, addend: 0x0, symName: _UnityAssertIntNumbersWithin, symObjAddr: 0x2C80, symBinAddr: 0x100004400, symSize: 0x150 }
- { offset: 0x221D, size: 0x8, addend: 0x0, symName: _UnityAssertUintNumbersWithin, symObjAddr: 0x2DD0, symBinAddr: 0x100004550, symSize: 0x150 }
- { offset: 0x228E, size: 0x8, addend: 0x0, symName: _UnityAssertNumbersArrayWithin, symObjAddr: 0x2F20, symBinAddr: 0x1000046A0, symSize: 0x4E0 }
- { offset: 0x2396, size: 0x8, addend: 0x0, symName: _UnityAssertEqualString, symObjAddr: 0x3400, symBinAddr: 0x100004B80, symSize: 0x180 }
- { offset: 0x23F8, size: 0x8, addend: 0x0, symName: _UnityPrintExpectedAndActualStrings, symObjAddr: 0x3580, symBinAddr: 0x100004D00, symSize: 0xA0 }
- { offset: 0x242D, size: 0x8, addend: 0x0, symName: _UnityAssertEqualStringLen, symObjAddr: 0x3620, symBinAddr: 0x100004DA0, symSize: 0x1A0 }
- { offset: 0x249E, size: 0x8, addend: 0x0, symName: _UnityPrintExpectedAndActualStringsLen, symObjAddr: 0x37C0, symBinAddr: 0x100004F40, symSize: 0xB0 }
- { offset: 0x24E2, size: 0x8, addend: 0x0, symName: _UnityAssertEqualStringArray, symObjAddr: 0x3870, symBinAddr: 0x100004FF0, symSize: 0x2B0 }
- { offset: 0x2590, size: 0x8, addend: 0x0, symName: _UnityAssertEqualMemory, symObjAddr: 0x3B20, symBinAddr: 0x1000052A0, symSize: 0x2A0 }
- { offset: 0x264C, size: 0x8, addend: 0x0, symName: _UnityNumToPtr, symObjAddr: 0x3DC0, symBinAddr: 0x100005540, symSize: 0xB0 }
- { offset: 0x2685, size: 0x8, addend: 0x0, symName: _UnityFloatToPtr, symObjAddr: 0x3E70, symBinAddr: 0x1000055F0, symSize: 0x20 }
- { offset: 0x26AF, size: 0x8, addend: 0x0, symName: _UnityFail, symObjAddr: 0x3E90, symBinAddr: 0x100005610, symSize: 0xA0 }
- { offset: 0x26E4, size: 0x8, addend: 0x0, symName: _UnityIgnore, symObjAddr: 0x3F30, symBinAddr: 0x1000056B0, symSize: 0xC0 }
- { offset: 0x2719, size: 0x8, addend: 0x0, symName: _UnityMessage, symObjAddr: 0x3FF0, symBinAddr: 0x100005770, symSize: 0x70 }
- { offset: 0x274E, size: 0x8, addend: 0x0, symName: _UnityDefaultTestRun, symObjAddr: 0x4060, symBinAddr: 0x1000057E0, symSize: 0xD0 }
- { offset: 0x2792, size: 0x8, addend: 0x0, symName: _UnitySetTestFile, symObjAddr: 0x4130, symBinAddr: 0x1000058B0, symSize: 0x20 }
- { offset: 0x27B8, size: 0x8, addend: 0x0, symName: _UnityBegin, symObjAddr: 0x4150, symBinAddr: 0x1000058D0, symSize: 0xA0 }
- { offset: 0x27DE, size: 0x8, addend: 0x0, symName: _UnityEnd, symObjAddr: 0x41F0, symBinAddr: 0x100005970, symSize: 0xC8 }
...