絕命中的一助linux程式載入器ld-linux.so中的LD_PRELOAD預載入庫
偶然錯誤的將linux系統中的libc.so.6連結刪除,導致busybox所有cmd命令失效,報load library error.最終的解決方法是採用預載入庫的方式來解決這個問題:
LD_PRELOAD=/lib/libc-2.6.1.so ln -s /lib/libc-2.6.1.so libc.so.6
根據shell/exec載入elf程式的原理,是先解析ELF,定位並載入ld-linux.so這個程式載入器(該so路徑需要通過ELF直接確定,且不依賴其他庫),然後再解析elf中需要load的共享庫,但這之前可以通過LD_PRELOAD來提前預先載入共享庫,如果程式允許需要的未初始化symbol在預載入庫中的話,就不會再load needed的共享庫(如果預先載入的庫也不滿足執行需要,則繼續根據編譯時symbol所needed關係來load對應的so庫,如果庫查詢後不存在就報load error。
預先載入so庫的好處:避免了程式執行時所謂的庫缺失,可以理解為是一種半自動的so載入過程,需要LD_PRELOAD變數來指定真實的庫路徑。當前,所有一切的功勞都是ld-linux的魅力所在。
相關推薦
絕命中的一助linux程式載入器ld-linux.so中的LD_PRELOAD預載入庫
偶然錯誤的將linux系統中的libc.so.6連結刪除,導致busybox所有cmd命令失效,報load library error.最終的解決方法是採用預載入庫的方式來解決這個問題:LD_PRELOAD=/lib/libc-2.6.1.so ln -s /lib/li
深入理解LINUX下動態庫連結器/載入器ld-linux.so.2
最近在Linux 環境下開發,搞了好幾天 Compiler 和 linker,覺得有必要來寫一篇關於Linux環境下 ld.so的文章了,google上搜索了很多相關介紹性的文件,發現國內百度上卻很少有相關類文件,覺得有必要來梳理一下: ld-linux.so.2 是
【OS學習筆記】十 真實模式:實現一個程式載入器-程式載入器如何將使用者程式載入到記憶體並執行
上一篇文章學習了以下內容: 用一種不同的分段方法,從另一個不同的的角度理解處理器的分段記憶體訪問機制 使用迴圈和條件轉移指令來優化主引導扇區程式碼 點選連結檢視上一篇文章:點選連結檢視 對於主引導扇區部分。大概前幾篇文章已經學的差不多了。現在是時候跳過主引
Linux程序排程器概述--Linux程序的管理與排程(十五)
記憶體中儲存了對每個程序的唯一描述, 並通過若干結構與其他程序連線起來. 排程器面對的情形就是這樣, 其任務是在程式之間共享CPU時間, 創造並行執行的錯覺, 該任務分為兩個不同的部分, 其中一個涉及排程策略, 另外一個涉及上下文切換. 1 背景知識
Linux靜態連結庫、動態連結庫、動態載入庫
所謂靜態連結庫,說白了就是在你把寫好的程式碼編譯的時候,就把你引用的庫一起給編進去了,從此後你編出來的執行程式跟外面都不再有任何關係,即使這個庫更新了,你也搭不上邊兒,其次,如果系統中許多類似的程式都需
Linux程序啟動過程分析do_execve(可執行程式的載入和執行)---Linux程序的管理與排程(十一)
execve系統呼叫 execve系統呼叫 我們前面提到了, fork, vfork等複製出來的程序是父程序的一個副本, 那麼如何我們想載入新的程式, 可以通過execve來載入和啟動新的程式。 x86架構下, 其實還實現了一個
Linux—CentOS7.4-DNS一(搭建DNS服務器)
查看 運行 roo -- direct rfc ins resolv .com 相關概念:正向解析:將域名解析成IP地址反向解析:將IP地址解析成域名環境:linux服務器一臺,IP地址:192.168.80.10 第一步:準備工作[root@localhost ~]# y
JVM類載入器與雙親委派模型(一)
(1)動態載入 類載入器是 Java 語言的一個創新,也是 Java 語言流行的重要原因之一。它使得 Java 類可以被動態載入到 Java 虛擬機器中並執行。類載入器從 JDK 1.0 就出現了,最初是為了滿足 Java Applet 的需要
使用匯編語言編寫載入器(載入使用者程式)
使用匯編語言編寫載入器載入指定格式的使用者程式 在計算機加電之後,計算機首先會讀取硬碟的主引導扇區,做一些必要的初始化工作,但是硬碟的一個扇區只有512位元組,所以我們要實現更多的功能,就要有使用者程式,我們需要把控制權限交給使用者程式(作業系統暫且也算一種使用者
JavaEE複習回顧十一: (基礎加強) 類載入器 && 註解 && 動態代理
參考文章: 1,動態代理——從一竅不通到恍然大悟 2,UML類圖與類的關係詳解 一,類載入器 1.1 什麼是類載入器,作用是什麼? 一個自己編寫的 Java 程式碼原始檔,起執行的過程主要分為三個階段。 第一個階段: SOURCE 級別,即原始碼階段,已
鳥哥的Linux私房菜讀書筆記--vim程式編輯器
1、vi的使用 vi共有三種模式,分別如下 一般命令模式(command mode) 以vi命令開啟某檔案後就是進入一般命令模式 編輯模式(insert mond) 在一般命令模式可進行刪除複製貼上等動作,但是無法編輯內容,要等到按下【I、i、o、O、a、A、r、R
一款開源PDF閱讀器 | linux軟體
XpdfReader 是一個免費的(但不是開源的)PDF檢視器,它包含一些在開源xpdf檢視器中找不到的額外功能。 XpdfReader 截圖 命令列工具 開源的Xpdf工具包包含以下幾個命令列工具,可以對PDF進行命令操作,實現對PDF檔案多種轉換操作及其他命令操作.
一號店簽名爆破&應用啟動速度優化方案X2C&修改系統類載入器&另類啟動元件方式
一、前言 今天的套路和之前不同,因為最近看到了一些零散的知識,我不想一些簡單的知識單獨寫一篇文章,因為我想要的是每篇文章都能讓你們看很長時間,這樣我一週發一篇才算合理,所以本文就把四個零碎的不太熟知的知識點介紹一下吧: 第一、如何將一號店應用簽名爆破 第二、應用啟動速度
黑馬程式設計師——Java集合框架(一)之迭代器、Collection層次結構等
-----------android培訓、java培訓、java學習型技術部落格、期待與您交流!------------ 集合框架概述 一、什麼是集合框架 1.什麼是集合? 集合是指把具有相同性質的一類東西匯聚成一個整體,簡單說就是指儲存資料的一個容器。集
深入理解java虛擬機器(三)(一個類載入器只初始化一次類物件,不同類載入器可以對同一類物件進行初始化)
package com.ygl; class Final{public static final int x=6/3;//此處x在編譯時能計算出值,是編譯時的常量,則System.out.println(Final.x);直接輸出值,不再執行下面static(前提是fina
linux蜂鳴器測試程式
必要的標頭檔案#include <stdio.h> //必要的標頭檔案 #include <termios.h> //POSIX終端控制定義 #include <unistd.h> #include <stdlib.h&g
6.Linux的Vim程式編輯器
目錄 1.學習Vim程式編輯的原因? 1.所有的Unix Like系統都會帶有Vim編輯器,其他的則不一定。 2.有些軟體的介面需要使用編輯器時直接呼叫Vim,所以必須掌握。 3.Vim具有程式編輯能力,主動糾正語法錯誤,簡單易用,而且根據
十一、JAVA多執行緒:執行緒上線文載入器
執行緒上下文類載入器(context class loader)是從 JDK 1.2 開始引入的。類 java.lang.Thread中的方法 getContextClassLoader()和 setContextC
Linux 核心定時器使用 一 低精度定時器
核心定時器是一個數據結構,它告訴核心在使用者定義的時間點使用使用者定義的引數來執行一個使用者定義的函式。其實現位於 <linux/timer.h>中。 核心提供了一組用來宣告、註冊和刪除核心定時器的函式,相關介面如下: struct timer_list {
最受Linux程式設計師歡迎的7個程式碼編輯器的介紹及下載地址
Linux程式設計師經常抱怨,自從他們使用了免費開源的系統平臺後,作為一名程式設計師,卻並沒有在程式碼編輯器上得到足夠的重視。他們往往會認為Linux平臺上的程式碼編輯器太少了,以至於影響他們的程式設計工作。但是事實並非如此,在Linux平臺上有太多的程式碼編輯器供你使用了,下面我們分享了7個最受Linu