When you work in IDA, it saves the results of your analysis in the IDA Database, so that you can pause and continue at a later time. You can recognize the database files by their file extension .idb
(for legacy, 32-bit IDA) or .i64
(for 64-bit IDA or IDA64). Thus they’re also often called just IDB. But what do they contain?
You can get a hint by looking at the working directory when the IDB is open in IDA:
So, IDB is a container which contains several sub-files:
filename.id0
is the actual database (implemented using B-tree), which contains all the metadata extracted from the input file and/or added by the user (names, comments, function boundaries and much more);filename.id1
stores the virtual array, containing a copy of all data loaded from the input file plus internal flags needed by IDA. Due to that it is usually 4-5 times as big as the original file but may grow or shrink if you add or remove data from the database;filename.id2
(if present) stores the data for sparse memory areas (e.g. mostly zero-filled segments) used in some situations;filename.nam
is a special cache for names used in the database;filename.til
is the type library containing Local Types for the database.When you close the database, IDA gives you a choice what to do with these files:
.idb
or .i64
container, adding checksums so that file corruption can be detected. Because no compression is used, the IDB size is roughly equal to the total size of the sub-files;See also:
Igor’s tip of the week #58: Keyboard modifiers