考你一下Xlinker和syscall

Xlinker和syscall

雖然Xlinker和syscall兩種沒關係,但最近在工作中一起碰到了,琢磨了半天。 下面以筆試題的形式先考考讀者:

1. 自己實現一組內存分配和釋放函數。

要求能夠替代之前的alloc/free/memalign函數。要求:

  • 不修改原始代碼,只替換庫;
  • debug 版本的時候,調用自己開發的庫
  • release 版本,用標誌庫

2. 在應用程序如何調用底層的系統調用接口。

要求在應用程序直接調用系統調用,來提高性能。

3. 提示

3.1 問題1的提示

  1. 代碼中可以通過typeof 定義新函數和之前的malloc/free函數接口和類型一致;

  2. GCC鏈接選擇中可以通過 -Xlinker --wrap=malloc 指定鏈接到想要的庫

  3. GCC鏈接選擇中可以通過-Xlinker --undefined=__wrap_malloc忽略沒有定義的函數;

    -Xlinker --wrap=malloc -Xlinker --undefined=wrap_malloc -Xlinker --wrap=free -
    Xlinker --undefined=__wrap_free -Xlinker --wrap=memalign -Xlinker --undefined=
    wrap_memalign -lpthread -laio -lfuse`

3.2 問題2的提示

頭文件:

#include <sys/syscall.h>

部分關鍵代碼:

#define UTEX_WAIT      0
#define UTEX_WAKE      1
#define utex(...) syscall(SYS_utex, ##__VA_ARGS__)
ret = utex(&cond->signalledCnt, UTEX_WAKE, 1, NULL, NULL, 0);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章