2

nasm プログラムで、さまざまな C ライブラリからいくつかの関数を呼び出す必要があります。

ライブラリ:

 <sys/ptrace.h>
 <sys/wait.h>

...そして、ptrace、execl、wait などの関数。

アセンブリ言語でCライブラリ関数fgetsを使用するには?

4

1 に答える 1

0

アセンブリ プログラムから C またはその他の HLL 関数を使用するには、一般に次の 2 つの方法があります。

  1. 静的リンク - リンカーを使用している場合は、必要な HLL 生成の .obj または .lib ファイルと一緒にプログラムをリンクできます。

  2. 動的リンク - プログラムは、コンパイル時ではなく、読み込み時に必要な関数にリンクします。2 つの可能な実装があります。

    2.1. 動的ライブラリを手動でロードし、必要な関数のアドレスを取得します。これには、OS が提供するサービスを使用する必要があります。たとえば Linux では、これは sys_uselib (かなり古い) であるか、自分でライブラリをロードして関数アドレスの ELF ファイルを解析します。

    2.2. 使用するライブラリと関数のリストを含むインポート テーブルを作成します。次に、OS ローダーは、関数のアドレスをプレースホルダー変数に自動的に提供し、そこから間接的に呼び出すことができます。

これらのメソッドはすべて、OS とアセンブラーに大きく依存するため、使用するアセンブラーの例のみを提供できます。

Linux 用のインポート テーブルを作成する FreshLib 用のインポート マクロ。

Windowsでも同じ

Linuxでのライブラリ「libc.so」の使用例

ライブラリ「user32.dll」のWindowsでの使用例

于 2013-07-18T17:35:28.823 に答える