assemblydwarfaddr2line

Reverse of addr2line


given an object file and address addr2line tool can relate it to a file and line number in the source code.

I'd like to have the opposite. Given a line number and an object file I want to get a list of instruction addresses which correspond to a given line in the source code.

I know that I can use objdump -DS and seek for a line, but that inconvenient, and requires manual effort to filter out the addresses. Do you know any tool which can do what I want if I give it a list of lines?

UPD.

I give an example of what I want.

I have a set of file lines:

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

I pass this list to a tool:

cat lines | line2addr -e lib.so

And it reports me instruction addresses for these lines:

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
...

Solution

  • The way to do it in a utility manner is with the following GDB cmd-line:

    gdb ../main.o -ex "info line main.c:39" --batch 
    Line 39 of "main.c" starts at address 0x36 <main+54> and ends at 0x5e <main+94>.
    

    The GDB accepts either an object or an executable file compiled with debug info (-g). Use GDB 7.6 and higher. Earlier versions crashed on Windows while loading object files.

    Multiple lines can be translated by applying the -ex switch multiple times:

    gdb ../main.o -ex "info line main.c:39" -ex "info line main.c:41" --batch
    Line 39 of "main.c" starts at address 0x36 <main+54> and ends at 0x5e <main+94>.
    Line 41 of "main.c" starts at address 0x5e <main+94> and ends at 0x70 <main+112>.