红联Linux门户
Linux帮助

gdb 调试时发现的怪现象

发布时间:2010-10-26 23:04:46来源:红联作者:vfdff
(gdb) n

test generic function 11
186 ContainAdd((void*)(exit), (void*)(exit_stub));
(gdb) n

Breakpoint 4, ContainAdd (pOldFunc=0x8048458, pNewFunc=0x8048861) at hooktest3.c:130
130 printf("Input(0) pOldFunc = 0x%x, pNewFunc = 0x%x!\n", pOldFunc, pNewFunc);
(gdb)
Input(0) pOldFunc = 0x8048458, pNewFunc = 0x8048861!
131 printf("Input(&0)pOldFunc = 0x%x, pNewFunc = 0x%x!\n", &pOldFunc, &pNewFunc);
(gdb) disas exit
Dump of assembler code for function exit:
0xb7d59140 : push %ebx
0xb7d59141 : call 0xb7d418de <_Unwind_Find_FDE+114>
0xb7d59146 : add $0x12deae,%ebx
0xb7d5914c : sub $0x18,%esp
0xb7d5914f : movl $0x1,0x8(%esp)
0xb7d59157 : lea 0x330(%ebx),%eax
0xb7d5915d : mov %eax,0x4(%esp)
0xb7d59161 : mov 0x20(%esp),%eax
0xb7d59165 : mov %eax,(%esp)
0xb7d59168 : call 0xb7d59050
End of assembler dump.
(gdb)

在使用gdb调试时,exit 函数的首地址 0xb7d59140 为什么和传给函数ContainAdd的第一个参数地址不一致呢?
文章评论

共有 4 条评论

  1. 花开花败2011 于 2011-02-12 17:45:16发表:

    软件开发者路线图:从学徒到高手

  2. yyxl 于 2010-12-11 10:05:43发表:

    应该是跳转了

  3. vfdff 于 2010-11-14 12:28:00发表:

    发现程序在 r 之后,exit的内容和地址都发生了变化

  4. troy268 于 2010-11-11 08:13:44发表:

    不懂,帮忙顶一下