- 论坛徽章:
- 0
|
本帖最后由 sculida 于 2014-12-16 16:08 编辑
大家好!在linux的gdb中,jump可以使运行中的程序跳转到程序文件自身的函数或者库文件的某个函数。但是hp-ux下只能跳转到程序文件自身的函数,不能跳转到库文件的某个函数。盼各位大神指点一二。
以下在hp-ux中操作
1. 查看各源文件
-bash-3.00$ cat main.c
#include <unistd.h>
#include <stdio.h>
#include "loglida.h"
int main() {
int i=0;
while (1) {
sleep(1);
printf("continue...%d\n", i++);
sleep(3);
loglida();
}
return 0;
}
-----
-bash-3.00$ cat loglida.h
#ifndef LOGLIDA_H
#define LOGLIDA_H
void loglida();
#endif
-----
-bash-3.00$ cat loglida.c
#include "loglida.h"
#include <stdio.h>
void loglida() {
printf("original loglida\n");
}
2. 编译链接生成程序
-bash-3.00$ aCC -c main.c
-bash-3.00$ aCC +z -b loglida.c -o lib/libloglida.sl
-bash-3.00$ aCC main.c -L/home/tcb/lida/ldpreload/lib -lloglida
3.执行程序
-bash-3.00$ ./a.out
continue...0
original loglida
continue...1
original loglida
continue...2
original loglida
continue...3
original loglida
continue...4
original loglida
continue...5
original loglida
continue...6
original loglida
continue...7
4.gdb attach之
-bash-3.00$ gdb a.out
HP gdb 5.4.0 for PA-RISC 1.1 or 2.0 (narrow), HP-UX 11.00
and target hppa1.1-hp-hpux11.00.
Copyright 1986 - 2001 Free Software Foundation, Inc.
Hewlett-Packard Wildebeest 5.4.0 (based on GDB) is covered by the
GNU General Public License. Type "show copying" to see the conditions to
change it and/or distribute copies. Type "show warranty" for warranty/support.
..(no debugging symbols found)...
(gdb) attach 13449
Attaching to program: /home/tcb/lida/ldpreload/a.out, process 13449
warning: The shared libraries were not privately mapped; setting a
breakpoint in a shared library will not work until you rerun the program.
(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...warning: reading `r3' register: No data
0xc0210d90 in __sigtimedwait_sys+0x10 () from /usr/lib/libc.2
(gdb) bt
#0 0xc0210d90 in __sigtimedwait_sys+0x10 () from /usr/lib/libc.2
#1 0xc021a634 in sigtimedwait+0x6c () from /usr/lib/libc.2
#2 0xc01ab520 in sleep+0xe8 () from /usr/lib/libc.2
#3 0x2cf4 in main+0x44 ()
(gdb) jump loglida
Continuing at 0xc033b2e0.
然后gdb和a.out就都卡在这里不能动了。但是如果loglida函数是在main.c里实现的话,gdb jump就可以顺利跳转(当然,跳转之后就会段错误)
----------
以上,请问怎么jump到库文件的某个函数。
非常感谢!
|
|