将 -ffile-prefix-map 与 objdump -S 一起使用

问题描述 投票:0回答:1

为了获得可重现的构建,我们在编译时使用

--ffile-prefix-map=/path/to/src=SRC --file-prefix-map=/path/to/lib=LIB
选项。同样,对于
gdb
我可以
set substitute-path SRC=/path/to/src
等等

但是,我不知道如何用

objdump -S
做类似的事情。我可以用一个小迷宫的符号链接来解决它,但我不理解
--prefix
objdump
选项,也不知道它是否是正确的使用方法。我尝试了
--prefix-strip=1 --prefix=/path/to/src
,但它似乎没有达到我的预期(嗯,它没有设法包含任何源代码!)

有什么办法可以做到这一点吗?

gcc gdb objdump
1个回答
0
投票

经过一些实验并快速了解 objdump 实用程序的

源代码
之后,我成功实现了预期的结果。这可能会令人费解,因为我没有做任何特别的事情,但一切都按预期进行。

首先,我创建了一个简单的“Hello, world!”程序位于名为

test.c
:

的文件中
#include <stdio.h>

int main(int argc, char** argv) {
    printf("Hello, world!\n");
}

使用以下命令编译它:

gcc -Wall -ggdb -ffile-prefix-map=/path/to/cwd=/src test.c -o test

使用

strings test | grep /src
验证
/src
已进入生成的
test
二进制文件,因此是时候使用以下命令让
objdump -S
查找源文件了:

objdump -S --prefix=/path/to/cwd --prefix-strip=1 test

这是生成的输出的摘录,其中显示了反汇编代码中所需的源代码片段:

0000000000000744 <main>:
#include <stdio.h>

int main(int argc, char** argv) {
 744:   a9be7bfd    stp x29, x30, [sp, #-32]!
 748:   910003fd    mov x29, sp
 74c:   b9001fe0    str w0, [sp, #28]
 750:   f9000be1    str x1, [sp, #16]
    printf("Hello, world!\n");
 754:   90000000    adrp    x0, 0 <__abi_tag-0x278>
 758:   91204000    add x0, x0, #0x810
 75c:   97ffffb1    bl  620 <puts@plt>
 760:   52800000    mov w0, #0x0                    // #0
}
 764:   a8c27bfd    ldp x29, x30, [sp], #32
 768:   d65f03c0    ret
 76c:   d503201f    nop

因此,您所使用的环境中一定存在某些问题。也许最好先尝试重现一个像这样的简单示例,看看它是否能按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.