Cプログラミングでオーバーライド機能を無効にする方法

Arshid KV

サンプルコードを確認してください。

#include <string.h> 
char* strcpy(char* dest, const char* src);

int main () 
{ 
  char str1[] = "Geeks";   
  char str2[] = "Quiz";   

  puts("str1 before memcpy "); 
  puts(str1); 

  /* Copies contents of str2 to sr1 */
  strcpy (str1, str2); 

  puts("\nstr1 after memcpy "); 
  puts(str1); 

  return 0; 
} 

char* strcpy(char* dest, const char* src){
      *dest = '1';
}

このタイプがリンカーライブラリによってオーバーライドされないようにする方法。

PSkocik

Cコードに名前空間を付けます。

私はすべてのグローバル(1つでもstatic実行可能ファイルでも)にライブラリのプレフィックスを付けます。これにより、libcとの名前の衝突は問題になりません(コードの移動、コードの統合、または以前のstatic関数の作成も簡素化されますextern)。

一般に、ライブラリをリンクするCプログラムの作成者が、ライブラリの機能(プログラム、ルール)に介入するのを止めることはできません。ただし、Linuxなどのプラットフォームで共有ライブラリの作成者である場合は、ライブラリの内部関数をリンカベースで簡単にオーバーライドできないようにすることができます。これを行う1つの方法は、ライブラリプライベート(非表示)シンボルエイリアスを使用することです。

例(非標準のC拡張機能と、静的ライブラリではなく共有ライブラリの使用に依存しています):

#!/bin/sh -eu
cat > h.h<<EOF
void a(void);
void A(void);
void b(void);
EOF
cat >  mylib.c <<EOF
#include <stdio.h>
#include "h.h"

void b_(void);
void a()
{
    b(); //overridable
}
void A(void)
{
    b_(); //non-overridable
}
void b(void)
{
    puts("b");
}
__attribute((visibility("hidden"),alias("b"))) typeof(b) b_ ;
//^ the b_ hidden function (unlike a static function)
//can be used from other translation units of the same shared lib
//but not from outside

EOF

gcc -c mylib.c -fpic
gcc mylib.o -o libmylib.so -shared

cat > main.c <<EOF
#include "h.h"
#include <stdio.h>
void b(void) { puts("my b"); }
int main()
{
    puts("do a"); a(); puts("===");
    puts("do b"); b(); puts("===");
    puts("do A"); A(); puts("===");

}
EOF
gcc main.c $PWD/libmylib.so
./a.out

出力:

do a
my b
===
do b
my b
===
do A
b
===

詳細については、たとえば、U。Drepperによる共有ライブラリの作成方法を参照してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

BrowserSyncのクロスデバイスアクションミラーリング機能を無効にする方法は?(ゴーストモード)

分類Dev

クラスの機能を無効にするテンプレートメタプログラミング

分類Dev

MySQLコミュニティサーバーでSSLプラグインを無効にする方法は?

分類Dev

mongoDB Javaドライバーのロギングを無効にする方法は?

分類Dev

CkEditorの置換機能でプラグインを無効にする方法は?

分類Dev

WordPressのプラグイン機能をオーバーライドする

分類Dev

プログラムでバイブレーションモードを有効または無効にする方法

分類Dev

vbで遅延バインディングエラーを無効にすると機能しません

分類Dev

Facebookのコードレスイベントをプログラムで無効にする方法は?

分類Dev

プログラムでAndroidのヌガーの分割画面の機能を無効にする方法は?

分類Dev

VSコードの自動名前変更タグ/ HTMLミラー機能を無効にする方法は?

分類Dev

C#でクライアントサーバープログラミングを開始する方法

分類Dev

jqueryデータテーブルでドラッグアンドドロップを無効にする方法

分類Dev

アンドロイドでプログラムシークレットキーボードを有効または無効にする方法?

分類Dev

CコンパイラフラグなしでバッファオーバーフローのUbuntuのスタック保護を無効にする

分類Dev

RowEditingプラグインのclicksToMoveEditor機能を無効にする方法は?

分類Dev

小さなスクロールバーjQueryプラグインを無効にする方法は?

分類Dev

Eclipse:コンパイルオプションを有効にする方法、C ++でのビルドエラー、OpenCLプログラム

分類Dev

プラグイン検証はMavenでどのように機能し、なぜ無効なバージョンでプロジェクトをビルドするのですか?

分類Dev

コマンドラインから「スタートアップアプリケーション」でプログラムを無効にする方法

分類Dev

Cプログラミング-ロード機能が発生した場合にカウントを停止する方法は?

分類Dev

ゼブラプリンタープログラミング言語でバーコードを印刷する方法

分類Dev

ドライブのカーネルプロービングを無効にする方法は?

分類Dev

透明なオーバーレイフラグメントからバックグラウンドアクティビティを無効にする方法

分類Dev

テレグラムデスクトップ自動メディアダウンロード機能を無効にする方法

分類Dev

プログラムでマルチウィンドウ機能を無効にする

分類Dev

iOSでプログラムでスリープモードを無効/有効にする方法は?

分類Dev

Outlookアドインをプログラムで有効/無効にする

分類Dev

プラグイントレースログをプログラムで/ SDK経由で有効にする方法

Related 関連記事

  1. 1

    BrowserSyncのクロスデバイスアクションミラーリング機能を無効にする方法は?(ゴーストモード)

  2. 2

    クラスの機能を無効にするテンプレートメタプログラミング

  3. 3

    MySQLコミュニティサーバーでSSLプラグインを無効にする方法は?

  4. 4

    mongoDB Javaドライバーのロギングを無効にする方法は?

  5. 5

    CkEditorの置換機能でプラグインを無効にする方法は?

  6. 6

    WordPressのプラグイン機能をオーバーライドする

  7. 7

    プログラムでバイブレーションモードを有効または無効にする方法

  8. 8

    vbで遅延バインディングエラーを無効にすると機能しません

  9. 9

    Facebookのコードレスイベントをプログラムで無効にする方法は?

  10. 10

    プログラムでAndroidのヌガーの分割画面の機能を無効にする方法は?

  11. 11

    VSコードの自動名前変更タグ/ HTMLミラー機能を無効にする方法は?

  12. 12

    C#でクライアントサーバープログラミングを開始する方法

  13. 13

    jqueryデータテーブルでドラッグアンドドロップを無効にする方法

  14. 14

    アンドロイドでプログラムシークレットキーボードを有効または無効にする方法?

  15. 15

    CコンパイラフラグなしでバッファオーバーフローのUbuntuのスタック保護を無効にする

  16. 16

    RowEditingプラグインのclicksToMoveEditor機能を無効にする方法は?

  17. 17

    小さなスクロールバーjQueryプラグインを無効にする方法は?

  18. 18

    Eclipse:コンパイルオプションを有効にする方法、C ++でのビルドエラー、OpenCLプログラム

  19. 19

    プラグイン検証はMavenでどのように機能し、なぜ無効なバージョンでプロジェクトをビルドするのですか?

  20. 20

    コマンドラインから「スタートアップアプリケーション」でプログラムを無効にする方法

  21. 21

    Cプログラミング-ロード機能が発生した場合にカウントを停止する方法は?

  22. 22

    ゼブラプリンタープログラミング言語でバーコードを印刷する方法

  23. 23

    ドライブのカーネルプロービングを無効にする方法は?

  24. 24

    透明なオーバーレイフラグメントからバックグラウンドアクティビティを無効にする方法

  25. 25

    テレグラムデスクトップ自動メディアダウンロード機能を無効にする方法

  26. 26

    プログラムでマルチウィンドウ機能を無効にする

  27. 27

    iOSでプログラムでスリープモードを無効/有効にする方法は?

  28. 28

    Outlookアドインをプログラムで有効/無効にする

  29. 29

    プラグイントレースログをプログラムで/ SDK経由で有効にする方法

ホットタグ

アーカイブ