- 论坛徽章:
- 0
|
回复 jhzhu_snps
有个办法我没试过,LZ有兴趣可以试试。
用objcopy工具,使用--redefine-syms将mallo ...
zx_wing 发表于 2010-03-15 16:08 ![]()
嗯,我试了一下,这个在linux下可以的,我举个例子。
old.c- #include <stdio.h>
- #include <stdlib.h>
- int main () {
- char* s = malloc (6);
- strcpy (s, "hello");
- printf ("%s\n", s);
- free (s);
- }
复制代码 编译生成old.o。我要将其中的malloc、free替换成xmalloc、xfree。
首先准备一个提供xmalloc和xfree的.o文件
xmalloc.c- #include <stdio.h>
- #include <stdlib.h>
- void* xmalloc (size_t size) {
- printf ("Xmalloc called\n");
- return malloc (size);
- }
- void xfree (void* ptr) {
- printf ("xfree called\n");
- return free (ptr);
- }
复制代码 gcc xmalloc.c -c生成xmalloc.o
然后准备一个符号替换文件syms- malloc xmalloc
- free xfree
复制代码 对old.o使用objcopy,如下:
objcopy --redefine-syms=syms old.o new.o
再将生成的new.o和xmalloc.o链接在一起
gcc new.o xmalloc.o -o new
执行new得到结果:
Xmalloc called
hello
xfree called
替换成功 |
|