From: greatim Date: Wed, 11 Jun 2014 03:27:50 +0000 (+0900) Subject: INTERNAL: non-pie build binary support X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=991704a220d3ba19910c161d1b252c40d8076da8;p=sdk%2Ftools%2Fdynamic-analyzer.git INTERNAL: non-pie build binary support In TV-SDK, get relative address for non-pie build binary Change-Id: I5d06625e160bb1be635da2f8dd7e9411aeb626d5 Signed-off-by: greatim --- diff --git a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/ElfSymbolExtractor.java b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/ElfSymbolExtractor.java index 2e90683..f71873d 100644 --- a/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/ElfSymbolExtractor.java +++ b/org.tizen.dynamicanalyzer/src/org/tizen/dynamicanalyzer/common/ElfSymbolExtractor.java @@ -32,7 +32,9 @@ import java.util.HashMap; import java.util.List; import org.eclipse.cdt.utils.elf.Elf; +import org.eclipse.cdt.utils.elf.Elf.PHdr; import org.eclipse.cdt.utils.elf.Elf.Symbol; +import org.eclipse.cdt.utils.elf.Elf.ELFhdr; import org.tizen.dynamicanalyzer.model.AddrSymbolPair; public class ElfSymbolExtractor { @@ -56,21 +58,34 @@ public class ElfSymbolExtractor { } else { symbolMap = new HashMap(); } + long baseAddr = 0; + Elf elf; try { elf = new Elf(path); elf.loadSymbols(); + + if (elf.getELFhdr().e_type == ELFhdr.ET_EXEC) { + PHdr[] phdrs = elf.getPHdrs(); + for (PHdr phdr : phdrs) { + if (phdr.p_type == PHdr.PT_LOAD) { + baseAddr = phdr.p_vaddr.getValue().longValue(); + break; + } + } + } } catch (IOException e) { e.printStackTrace(); return false; } + Symbol[] symbols = elf.getSymbols(); for (Symbol symbol : symbols) { if (symbol.st_type() != Elf.Symbol.STT_FUNC || symbol.st_shndx == Elf.Symbol.SHN_UNDEF) { continue; } - long addr = symbol.st_value.getValue().longValue(); + long addr = symbol.st_value.getValue().longValue() - baseAddr; String symbolStr = symbol.toString(); symbolStr = SymbolManager.demanglingFunctionName(symbolStr); symbolMap.put(addr, symbolStr); @@ -79,6 +94,7 @@ public class ElfSymbolExtractor { return true; } + @Deprecated public Long[] getSymbolAddress() { if (null == symbolMap || 0 == symbolMap.size()) { return null; @@ -90,6 +106,7 @@ public class ElfSymbolExtractor { return ret; } + @Deprecated public HashMap getSymbolMap() { return symbolMap; }