0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[01] C言語でコンソールから関数を呼び出す機構の振り返り ... 概要

Last updated at Posted at 2021-08-07
本シリーズのトップページ
https://qiita.com/robozushi10/items/fc185b5da0509b9a631f

はじめに

13年前(=2008年) に、次のような「コンソールからの関数呼び出し」を作成していたようである.
良い機会なので、C言語のポートフォリオ(作品)を兼ねて、該当コードを振り返ることにした.

当時の仕事で開発していたプログラムは、
stdin(標準入力)からの次の関数呼び出しの機構をサポートしていた.
 
この機能が存在した理由は以下であった.
プログラム実行環境には ファイルシステムが存在しない.
そのために次の制約があり、少しでもデバッグを捗るようにするためであった.
・gdb は使えない
・ログファイルの書き出しもできない

詳細

次のような仕組みで実装していた

挙動

(1) デバッグ対象のプログラムコード `*.c` が存在する.
 ⬇️ 
(2) `*.c` をコンパイルして `*.o` を作成する
 ⬇️ 
(3) `*.o` に対して `readelf -s` を実行して公開関数名を抽出する
 ⬇️ 
(4) (3) で抽出した公開関数名をヘッダファイルに書き出す
 ⬇️ 
(5) (4) のヘッダファイルを include して、コンソールから関数呼び出し機能も持つコードも含めてリンクする
 ⬇️ 
(6) 作成された実行ファイル a.out を実行する
 ⬇️ 
(7) a.out の stdin から、公開関数 (static 関数以外) とその引数を入力する
 ⬇️ 
(8) 上記 (7) で入力した関数が実行される

実行例

次のような公開関数 piyo が存在した場合の実行例である.

コード

void
piyo(char * mesg, char * mesg2)
{
    printf("(%s , %s) at piyo()\n", mesg, mesg2);
}

実行例

下図 2行目で関数 piyo を呼び出して、6行目に関数piyo のログが表示されている.
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?