mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-11 18:25:40 +02:00
Section offset info to absolute address.
This commit is contained in:
parent
c18c6ff16f
commit
03b46ea0c6
1 changed files with 13 additions and 4 deletions
|
@ -648,15 +648,24 @@ public class PE {
|
||||||
|
|
||||||
public Symbol[] getSymbols() throws IOException {
|
public Symbol[] getSymbols() throws IOException {
|
||||||
if (symbolTable == null) {
|
if (symbolTable == null) {
|
||||||
|
SectionHeader[] secHeaders = getSectionHeaders();
|
||||||
|
NTOptionalHeader ntHeader = getNTOptionalHeader();
|
||||||
|
|
||||||
RandomAccessFile accessFile = getRandomAccessFile();
|
RandomAccessFile accessFile = getRandomAccessFile();
|
||||||
long offset = fileHeader.f_symptr;
|
long offset = fileHeader.f_symptr;
|
||||||
symbolTable = new Symbol[fileHeader.f_nsyms];
|
symbolTable = new Symbol[fileHeader.f_nsyms];
|
||||||
for (int i = 0; i < symbolTable.length; i++, offset += Symbol.SYMSZ) {
|
for (int i = 0; i < symbolTable.length; i++, offset += Symbol.SYMSZ) {
|
||||||
symbolTable[i] = new Symbol(accessFile, offset);
|
Symbol newSym = new Symbol(accessFile, offset);
|
||||||
NTOptionalHeader ntHeader = getNTOptionalHeader();
|
|
||||||
// FIXME: What is this again ?
|
// 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)
|
if (ntHeader != null)
|
||||||
symbolTable[i].n_value += ntHeader.ImageBase + ntHeader.FileAlignment;
|
newSym.n_value += ntHeader.ImageBase;
|
||||||
|
|
||||||
|
symbolTable[i] = newSym;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return symbolTable;
|
return symbolTable;
|
||||||
|
|
Loading…
Add table
Reference in a new issue