Gdb 当每次地址不同时,如何使用strace-i进行调试

Gdb 当每次地址不同时,如何使用strace-i进行调试,gdb,strace,Gdb,Strace,[b77d0424]打开(“etc/shadow”,仅0rdu)=-1次访问(权限被拒绝) 每次运行[b77d0424]时,都会更改为另一个地址 我不能使用gdb*0xb77d0424然后使用c来查找lib64/libc.so.6 这似乎与linux编程书中提到的不一样 在虚拟盒中运行Ubuntu13.04之后 每次运行[b77d0424]时,都会更改为另一个地址 这是因为,您可以使用setarch-R命令禁用它 默认情况下,GDB也会禁用地址随机化,但在GDB和strace下获得相同地址的可能

[b77d0424]打开(“etc/shadow”,仅0rdu)=-1次访问(权限被拒绝)

每次运行[b77d0424]时,都会更改为另一个地址

我不能使用gdb*0xb77d0424然后使用c来查找lib64/libc.so.6

这似乎与linux编程书中提到的不一样

在虚拟盒中运行Ubuntu13.04之后

每次运行[b77d0424]时,都会更改为另一个地址

这是因为,您可以使用
setarch-R
命令禁用它

默认情况下,GDB也会禁用地址随机化,但在GDB和
strace
下获得相同地址的可能性非常小,因为这两种工具下的执行环境非常不同。您实际上不需要在
strace
下找到地址,您可以在GDB中找到它:

  • catch syscall open
  • 运行
现在,您正在查看程序执行的
open
系统调用之一。使用
继续
,直到您停在感兴趣的位置。现在使用
info registers
查找第一个参数的地址,并在该地址上设置一个监视点

每次运行[b77d0424]时,都会更改为另一个地址

这是因为,您可以使用
setarch-R
命令禁用它

默认情况下,GDB也会禁用地址随机化,但在GDB和
strace
下获得相同地址的可能性非常小,因为这两种工具下的执行环境非常不同。您实际上不需要在
strace
下找到地址,您可以在GDB中找到它:

  • catch syscall open
  • 运行

现在,您正在查看程序执行的
open
系统调用之一。使用
继续
,直到您停在感兴趣的位置。现在使用
info registers
查找第一个参数的地址,并在该地址上设置一个观察点。

如何使用GDB在系统调用时中断:如何禁用ASLR:如何使用GDB在系统调用时中断:如何禁用ASLR: