Linux指令记 —— ldd

ldd

man:

ldd - print shared library dependencies

查寻动态库的依赖关系

ldd并不是可执行程序

ldd实质上是一份执行脚本

[root@localhost lib]# file /usr/bin/ldd
/usr/bin/ldd: Bourne-Again shell script, ASCII text executable

它的执行原理可在此链接中了解:
http://man.linuxde.net/ldd

常用指令

ldd *.so
ldd -r *.so
### Pwn 中 `ldd` 的作用及用法 在CTF竞赛和漏洞利用开发中,`ldd` 是一个非常有用的工具。该命令用于显示共享对象依赖关系,即程序运行时所需的动态链接库。 对于二进制文件而言,`ldd` 可以帮助识别目标应用程序所依赖的具体版本的共享库[^1]。这对于理解远程服务器上环境配置以及本地调试至关重要。当准备攻击某个特定服务时,知道其使用的 glibc 版本和其他重要库的信息是非常有帮助的。 具体来说,在 pwn 领域内使用 `ldd` 主要有以下几个目的: - **确认依赖项**:通过查看二进制文件的实际依赖情况来验证是否存在已知的安全问题或特性。 - **分析加载器路径**:有时为了绕过某些保护机制(如 ASLR),需要精确控制如何解析这些外部符号;此时可以借助于自定义设置 LD_PRELOAD 或其他环境变量实现特殊行为。 - **辅助逆向工程**:如果遇到加壳或其他形式混淆处理过的样本,则可能无法直接读取 ELF 头部信息中的 .interp 字段得知解释器位置——这时就可以依靠 ldd 输出获取相关信息以便进一步研究。 下面是一些常见的应用场景及其对应的 shell 命令实例: #### 场景一:查询指定可执行文件所需的所有共享库 ```bash $ ldd ./vulnerable_program ``` 这会列出所有被请求加载至内存并与之交互的 so 文件连同它们各自的绝对路径。 #### 场景二:检查是否启用了地址空间布局随机化 (ASLR) 由于不同发行版默认策略有所区别,因此建议先测试当前系统的状态再决定后续操作方向: ```bash $ cat /proc/sys/kernel/randomize_va_space ``` 返回值为 0 表明未开启此功能;而大于零则意味着不同程度上的启用程度。 #### 场景三:临时改变 libc 库的位置来进行实验性的测试 假设已经按照说明将所需要的 libc 和 ld 放置到了 ~/tmp 目录下,那么可以通过如下方式启动目标进程并强制它采用新的标准C函数库副本: ```bash $ env -i PATH=$PATH LD_LIBRARY_PATH=~/tmp:/lib64 ldd --inhibit-rpath --library-path ~/tmp ./target_binary ``` 上述指令不仅指定了额外搜索路径还抑制了原有 rpath 设置的影响从而确保只考虑由用户提供的资源。 综上所述,熟练掌握 `ldd` 工具能够极大地提高解决实际问题的能力,并且有助于加深对 Linux 下程序装载过程的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值