使用汇编程序恢复C库、动态链接器

本文介绍了如何在C库或动态链接器损坏导致可执行文件不可用时,通过编写简单的汇编代码创建软链接进行环境恢复。作者提供了aarch64和x86平台的实例,展示了如何利用symlinkat系统调用来解决问题。
摘要由CSDN通过智能技术生成

写在前面

上层语言的好处就是方便,但无法触摸规则的底层,所有的规则都是别人制定的
学习底层原理不仅可以让我们对高级语言的规则有更深的理解,而且可以从自己的角度去探寻新的道路

背景

有些时候我们可能想替换环境上的c库,但是如果不慎直接把原有的c库给mv掉了,或者替换的c库不能用,这时候就傻眼了,可执行文件全部不可用,怎么恢复环境呢?
就目前来说,我没有看到其他文章有给出对于动态链接器和C库损坏的的解决方案
另一种方案请参考我的另一篇文章:基于剪贴板的文件传输方案

原理

动态链接器

在这里插入图片描述
上图是aarch64平台的动态链接器,x86平台的叫/usr/lib64/ld-xx.so
这个库被破坏会导致所有依赖动态库的可执行文件均不可用

C库

在这里插入图片描述
这个库被破坏了啥玩意都够够呛能用了,怎么说呢,,,那可是C库啊,


汇编代码

.data
	srcfile:.string "/usr/lib/aarch64-linux-gnu/libc.so.6_bak"
	dstfile:.string "/usr/lib/aarch64-linux-gnu/libc.so.6"
.text
	.global  _start
_start:
	ldr     x0,     =srcfile
	ldr     x2,     =dstfile
	mov     x8,     36          // the call number of symlink
	svc #0

	mov     x8,     93
	svc #0

一段很简单的汇编代码,使用symlinkat系统调用从备份的文件建立了一个软链接,不了解汇编的话可以参考这两篇文章
x86平台AT&T语法:AT&T汇编入门[0] hello world
ARM64平台:ARM64汇编[0] hello world


x86平台上有symlink可以使用,aarch64平台上需要使用多一个参数的symlinkat ↓
在这里插入图片描述

示例

删除C库

在这里插入图片描述
可以看到删完C库之后ls立即不可用了,在左边运行实现编译好的汇编程序,从备份文件建立一个软链接,环境恢复正常

删除动态链接器

在这里插入图片描述
可以看到删完动态链接器之后ls又不可用了,在左边运行实现编译好的汇编程序,从备份文件建立一个软链接,环境恢复正常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值