小编smc*_*ron的帖子

是否可以覆盖对象模块中的静态函数(gcc,ld,x86,objcopy)?

有没有办法在对象模块中覆盖静态范围的函数?

如果我从这样的东西开始,带有全局符号"foo"的模块是一个调用本地符号"bar"的函数,它调用本地符号"baz"

[scameron@localhost ~]$ cat foo.c
#include <stdio.h>
static void baz(void)
{
    printf("baz\n");
}

static void bar(void)
{
    printf("bar\n");
    baz();
}

void foo(void)
{
    printf("foo\n");
    bar();
}

[scameron@localhost ~]$ gcc -g -c foo.c
[scameron@localhost ~]$ objdump -x foo.o | egrep 'foo|bar|baz'
foo.o:     file format elf32-i386
foo.o
00000000 l    df *ABS*  00000000 foo.c
00000000 l     F .text  00000014 baz
00000014 l     F .text  00000019 bar
0000002d g     F .text  00000019 foo
Run Code Online (Sandbox Code Playgroud)

它有一个全球性的"foo"和两个当地人"bar"和"baz".

假设我想编写一些运动条和baz的单元测试,我可以这样做:

[scameron@localhost ~]$ cat barbaz
bar
baz
[scameron@localhost ~]$ …
Run Code Online (Sandbox Code Playgroud)

c gcc ld objcopy interposing

9
推荐指数
1
解决办法
2369
查看次数

标签 统计

c ×1

gcc ×1

interposing ×1

ld ×1

objcopy ×1