Met*_*est 47 c linux gcc gdb x86-64
我用LD_PRELOADing一个特定的库来运行一个程序.像这样.
LD_PRELOAD=./my.so ./my_program
Run Code Online (Sandbox Code Playgroud)
如何使用gdb运行此程序?
Met*_*est 61
请执行下列操作.
gdb your_program
(gdb) set environment LD_PRELOAD ./yourso.so
(gdb) start
Run Code Online (Sandbox Code Playgroud)
Ale*_*nov 14
发布是因为我们碰到了一个set environment
无效的案例:
从GDB文档:
Run Code Online (Sandbox Code Playgroud)set exec-wrapper wrapper show exec-wrapper unset exec-wrapper
设置'exec-wrapper'时,指定的包装器用于启动程序以进行调试.gdb使用表单exec包装程序的shell命令启动程序.引用被添加到程序及其参数中,但不包含在包装器中,因此如果适合您的shell,则应添加引号.包装器运行直到它执行你的程序,然后gdb控制.
您可以使用最终调用execve的任何程序及其参数作为包装器.几个标准的Unix实用程序可以做到这一点,例如env和nohup.任何以exec"$ @"结尾的Unix shell脚本也会起作用.
例如,您可以使用env将环境变量传递给调试的程序,而无需在shell的环境中设置变量:
Run Code Online (Sandbox Code Playgroud)(gdb) set exec-wrapper env 'LD_PRELOAD=libtest.so' (gdb) run
这是一种将所有东西(带参数和环境)作为一个命令运行的方法:
例:
gdb --args env LD_PRELOAD=/usr/local/lib/libstderred.so ls -l
Run Code Online (Sandbox Code Playgroud)
敏锐的观察者会注意到env
这里作为一个exec包装器(如Alexey Romanov的回答).
您可以env
使用-iex
标志在命令行上提供exec-wrapper :
gdb -iex "set exec-wrapper env LD_PRELOAD=./my.so" ./my_program
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20982 次 |
最近记录: |