2015-11-27 54 views
0

給定一個目標文件和地址addr2line工具可以將它與源代碼中的文件和行號關聯起來。addr2line的反向

我想要相反。給定一個行號和一個目標文件,我想獲得與源代碼中給定行對應的指令地址列表。

我知道我可以使用objdump -DS並尋找一條線路,但這很不方便,並且需要手動工作來過濾地址。你知道有什麼工具可以做我想做的嗎?如果我給它一個行列表?

UPD。

我舉了一個我想要的例子。

我有一組文件行:

src/a.c:14 
src/a.c:28 
src/b.c:44 

我通過這個列表的工具:

cat lines | line2addr -e lib.so 

,並上報我指令地址爲這些行:

0x442: src/a.c:14 
0x444: src/a.c:14 
0x44a: src/a.c:14 
0x584: src/a.c:28 
0x588: src/a.c:28 
... 
+1

'gdb'調試器可以通過可執行文件(而不是單獨的對象文件)來完成。當然,你需要編譯調試信息。 –

+0

http://gcc.godbolt.org/爲將行映射到asm的小函數做了很好的工作。它甚至有顏色編碼。例如http://goo.gl/aLPTts –

+0

@BasileStarynkevitch我可以編譯調試信息。但我並沒有完全理解如何獲取gdb中的地址。我發現我可以設置一個斷點,但它只顯示一個地址,儘管同一行可能有多條指令。 – mcsim

回答

0

仔細閱讀documentation of GDB。如果你的可執行文件已建成調試信息(與-g編譯所有的代碼),你可以使用 stack related命令,machine code related命令等

我不知道理解你的願望,但我想這disx命令可能會有幫助

此外,最近的GDB在Python和Guile中都是腳本化的。

+0

用一個例子更新了這個問題 – mcsim