diff options
| author | ladevieq <ladevie.quentin@gmail.com> | 2026-07-14 00:54:14 +0200 |
|---|---|---|
| committer | ladevieq <ladevie.quentin@gmail.com> | 2026-07-14 00:54:14 +0200 |
| commit | 968d63f3eda7ba49fcba93e444788091cf3ccee8 (patch) | |
| tree | 22d183400370116fd8d0412222f101eabecd0d89 /src/pdb.c | |
| parent | 0f0ff9e1b91b64d2fe5d35a8f7f30f427905f66e (diff) | |
Fix the way we read the stream directory
Used to luckily find the stream block index at address - 1
Now we use the stream directory block list to read the directory block
index
Diffstat (limited to 'src/pdb.c')
| -rw-r--r-- | src/pdb.c | 22 |
1 files changed, 14 insertions, 8 deletions
@@ -228,9 +228,15 @@ void open_pdb(const i8* pdb_path, struct module* module) { assert(((i64)superblock.num_blocks) * superblock.block_size == file_size.QuadPart); u8* block = alloca(superblock.block_size); + // Read directory block list + // NOTE: Stream directory bigger than a single block not managed + assert(superblock.num_directory_bytes < superblock.block_size); + u32 dir_block_index = 0U; + SetFilePointer(pdb_file, superblock.block_map_addr * superblock.block_size, NULL, FILE_BEGIN); + ReadFile(pdb_file, (void*)&dir_block_index, sizeof(dir_block_index), &b_read, NULL); + // Stream directory - u32 dir_addr = (superblock.block_map_addr - 1U) * sizeof(block); - SetFilePointer(pdb_file, dir_addr, NULL, FILE_BEGIN); + SetFilePointer(pdb_file, dir_block_index * superblock.block_size, NULL, FILE_BEGIN); ReadFile(pdb_file, (void*)block, superblock.num_directory_bytes, &b_read, NULL); assert(b_read == superblock.num_directory_bytes); @@ -254,7 +260,7 @@ void open_pdb(const i8* pdb_path, struct module* module) { } stream_blocks_indices[stream_id] = &stream_blocks[block_index]; - for(u32 id = 0u; id < (stream_sizes[stream_id] / sizeof(block)) + 1U; id++) { + for(u32 id = 0u; id < (stream_sizes[stream_id] / superblock.block_size) + 1U; id++) { print("PDB stream blocks : %u\n", stream_blocks[block_index]); block_index++; } @@ -269,7 +275,7 @@ void open_pdb(const i8* pdb_path, struct module* module) { }; struct pdb_info_stream pdb_info_stream = { 0U }; - SetFilePointer(pdb_file, stream_blocks_indices[PDB][0U] * sizeof(block), NULL, FILE_BEGIN); + SetFilePointer(pdb_file, stream_blocks_indices[PDB][0U] * superblock.block_size, NULL, FILE_BEGIN); ReadFile(pdb_file, (void*)&pdb_info_stream, sizeof(pdb_info_stream), &b_read, NULL); // DBI Stream @@ -323,7 +329,7 @@ void open_pdb(const i8* pdb_path, struct module* module) { u8* modules_name[64U] = { 0U }; u8* obj_files_name[64U] = { 0U }; u8 DBI_block[4096U] = { 0U }; - SetFilePointer(pdb_file, stream_blocks_indices[DBI][0U] * sizeof(block), NULL, FILE_BEGIN); + SetFilePointer(pdb_file, stream_blocks_indices[DBI][0U] * superblock.block_size, NULL, FILE_BEGIN); ReadFile(pdb_file, (void*)&DBI_block, sizeof(DBI_block), &b_read, NULL); struct DBI_stream_header* DBI_stream_header = (struct DBI_stream_header*)DBI_block; @@ -421,12 +427,12 @@ void open_pdb(const i8* pdb_path, struct module* module) { } // Global Symbol Stream - SetFilePointer(pdb_file, stream_blocks_indices[DBI_stream_header->global_stream_index][0U] * sizeof(block), NULL, FILE_BEGIN); + SetFilePointer(pdb_file, stream_blocks_indices[DBI_stream_header->global_stream_index][0U] * superblock.block_size, NULL, FILE_BEGIN); ReadFile(pdb_file, (void*)&block, sizeof(DBI_stream_header), &b_read, NULL); // Public Symbol Stream - SetFilePointer(pdb_file, stream_blocks_indices[DBI_stream_header->public_stream_index][0U] * sizeof(block), NULL, FILE_BEGIN); - ReadFile(pdb_file, (void*)&block, sizeof(block), &b_read, NULL); + SetFilePointer(pdb_file, stream_blocks_indices[DBI_stream_header->public_stream_index][0U] * superblock.block_size, NULL, FILE_BEGIN); + ReadFile(pdb_file, (void*)&block, superblock.block_size, &b_read, NULL); CloseHandle(pdb_file); } |
