a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 學院 > 操作系統 > 正文

教你如何對一個可執行程序進行攔截和包裝?

2024-07-26 00:27:16
字體:
來源:轉載
供稿:網友
  文中一共討論了3種方法,來實現對【函數】進行攔截:
 
  在編譯階段插樁;
  在鏈接階段插樁;
  在執行階段插樁;
  昨天一個網友提了另外一個問題:如何對一個可執行程序進行攔截?

  這里就引出一個問題了:
 
  既然上面這6個命令都鏈接到systemctl,那么當systemctl被執行的時候,它是如何知道它是被哪一個命令調用的呢?
 
  看一下源碼就知道了:通過參數 argv[0] 來獲得的。
 
  我們知道,main函數通過argc和argv[]來獲取所有的參數,如下:
 
  復制
  // 測試文件:test1.c
 
  #include <stdio.h>
 
  int main(int argc, char *argv[])
  {
      printf("argc = %d /n", argc);
      for (int i = 0; i < argc; i++)
           printf("argv[%d] = %s /n", i, argv[i]);
      return 0;
 
  可以看到:argv[0] = ./test1,因為我們是在命令行直接調用test可執行程序的,這很容易理解。
 
  那么:如果test是被一個軟鏈接調用的呢?
 
  測試一下,創建軟鏈接:
 
  復制
  $ ln -s test1 link1
  1.

  執行一下:
 
  此時,argv[0] = ./link1。
 
  也就是說:第一個參數存放的是軟鏈接文件路徑,systemctl 的道理也是如此!
 
  知道了這個原理,那我們就可以在reboot與systemc之間橫叉一刀,增加一個中間可執行文件:
 
  為了便于描述,我們把這個中間文件創建為腳本pre_systemctl.sh,然后把root軟鏈接到這個腳本。
 
  注意:在理解原理之前,建議不要直接用 reboot 等系統命令進行操作,可以自己寫一些測試程序,例如上面的 test。
 
  創建了pre_systemctl.sh腳本之后,并且把reboot軟鏈接到它,在腳本中輸入如下內容:
 
  此時,在命令行中執行reboot命令,就會執行這個腳本,并且這個腳本也能夠正確的把/sbin/root作為第0個參數傳遞給/bin/systemctl,如下圖所示:
 
  在這個腳本中,可以在執行systemctl之前,做任何需要關機前需要處理的一些事情。
 
  問題似乎是解決了,但是好像還有一個問題:
 
  如果用戶在執行命令時輸入了一些其它的參數,這個腳本程序也應該透明的把這些參數傳遞給 systemctl 才可以!
 
  為了便于觀察,我們在腳本中多打印個參數,并通過exec來啟動systemctl,并且強制把參數$0設置為systemctl的第0個參數:
 
  這個腳本文件中的重點是最后一條命令:
 
  復制
  exec -a $0 /bin/systemctl $*
  1.
  此時,在命令行中執行reboot指令,輸出如下:
 
  如此調用systemctl,就解決了剛才提出的問題,而且通過 $*,可以把任意多個參數透明的傳遞下去。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产一区二区三区免费视频 | 韩国三级中文字幕hd有奶水 | 欧美激情自拍 | 日韩av一区二区三区在线 | 欧美精品欧美精品系列 | 激情开心成人网 | 色婷婷国产精品久久包臀 | 欧美日韩一区二区视频在线观看 | 久久精品中文字幕 | 一区二区三区四区在线 | 欧美自拍视频在线观看 | 日本免费黄色网址 | 欧美日韩精品一区二区三区在线观看 | 一区二区亚洲视频 | 国产高清在线 | 日本不卡一区二区三区在线观看 | 久久精品国产一区二区电影 | 欧美亚洲激情视频 | 国产一二三区不卡 | 国产精品久久久久久久久久东京 | 精品久久久久国产免费 | 国产精品久久久久久久久久免费看 | 国产91在线播放精品 | 国产高潮好爽受不了了夜色 | 99久久99久久精品国产片果冻 | 国产h视频在线观看 | 2019亚洲日韩新视频 | 黄色av电影在线看 | 一区二区精品在线 | 麻豆精品一区二区 | 国产成人精品一区二区三区视频 | 欧美精品一区二区三区四区 | 一区二区三区精品视频 | 全黄大全大色全免费大片 | 欧美精品第一页 | 狠狠操综合网 | 久久99精品久久久久久园产越南 | 亚洲欧美在线视频 | 在线观看黄色大片 | 午夜影晥| 精品久久精品 |