日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux下找不到libc 库,Linux-覆盖libc open()库函数

發布時間:2023/12/4 linux 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下找不到libc 库,Linux-覆盖libc open()库函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我在庫&中有glibc提供的相同的覆蓋open().我首先在庫中設置了LD_PRELOAD,因此當進程調用open()時,將調用庫中定義的open.

問題:-glibc中還有其他幾個函數,一旦示例為getpt(),就會調用open(),當getpt()調用open()時,將調用glibc中定義的open(),我將如何使getpt ()調用在我的library()中定義的open().

限制:-我沒有選擇編譯glibc的選項.

解決方法:

正如tmcguire正確指出的那樣,從posix_openpt到__open的調用是對內部符號的調用,并且不能插入.

實際上,glibc開發人員認為此調用是實現細節,您無需進行任何更改.

I am looking at compile time solution

你不能擁有它.

than run time solution cause run time solution will have performance impact.

運行時解決方案不必對性能有任何影響(除了調用open而不是glibcs??的開銷外).

我只知道庫插入glibc內部調用的一種方式:運行時修補.這個想法是為了

>找到libc.so.6 open的地址(這是__open的別名),

>在運行時找到glibc .text節的邊界

>掃描以查找__open指令

>對于任何此類指示

> mprotect它所在的頁面可寫

>計算一條名為CALL my_open的新指令,并將其修補為原始指令的“頂部”

> m保護頁面回讀和執行

這很丑陋,但在i * 86(32位)Linux上可以正常使用,在C *中,CALL可以“到達” 4GB地址空間內的任何其他指令.對于x86_64而言,它不起作用,其中CALL仍限于/ 2GB,但是從庫到glibc的距離可能會更多.

在這種情況下,您需要在libc.so.6中找到一個合適的蹦床,您可以將原始的CALL重定向到該蹦床,并可以將寄存器間接JMP放置到最終的目的地.幸運的是,由于函數對齊,libc.so.6通常具有多個大小適當的未使用的NOP區域.

標簽:gcc,override,glibc,ld,linux

來源: https://codeday.me/bug/20191121/2055603.html

總結

以上是生活随笔為你收集整理的linux下找不到libc 库,Linux-覆盖libc open()库函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。