1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-24 01:15:29 +02:00

Section offset info to absolute address.

This commit is contained in:
Ken Ryall 2010-01-20 22:24:25 +00:00
parent c18c6ff16f
commit 03b46ea0c6

View file

@ -648,15 +648,24 @@ public class PE {
public Symbol[] getSymbols() throws IOException {
if (symbolTable == null) {
SectionHeader[] secHeaders = getSectionHeaders();
NTOptionalHeader ntHeader = getNTOptionalHeader();
RandomAccessFile accessFile = getRandomAccessFile();
long offset = fileHeader.f_symptr;
symbolTable = new Symbol[fileHeader.f_nsyms];
for (int i = 0; i < symbolTable.length; i++, offset += Symbol.SYMSZ) {
symbolTable[i] = new Symbol(accessFile, offset);
NTOptionalHeader ntHeader = getNTOptionalHeader();
// FIXME: What is this again ?
Symbol newSym = new Symbol(accessFile, offset);
// Now convert section offset of the symbol to image offset.
if (newSym.n_scnum >= 1 && newSym.n_scnum <= secHeaders.length) // valid section #
newSym.n_value += secHeaders[newSym.n_scnum-1].s_vaddr;
// convert to absolute address.
if (ntHeader != null)
symbolTable[i].n_value += ntHeader.ImageBase + ntHeader.FileAlignment;
newSym.n_value += ntHeader.ImageBase;
symbolTable[i] = newSym;
}
}
return symbolTable;