LinuxではじめてのC言語を実行する | vim + gcc

Linux (Ubuntu) + vimでC言語を実行する環境構築をしたので、手順のノートを残します。

UbuntuにはもともとC言語が入っているため、以下の流れでC言語を実行できるようになりました。

  1. vimとgccのインストール
  2. vimでテキストの作成
  3. gccでコンパイル
  4. ディレクトリ指定で実行


はじめに

おはよう。@bioerrorlogです。

Linuxを入れたばかりだと、そもそもテキストファイルをどうやって作成するのか、どうやってプログラミングをすればよいのか、いまいちわかりません。

もちろん、Linuxでも好みのエディタを導入してプログラミングできると思いますが、今回はvimを用いた環境構築手順を記録します。


作業環境

Ubuntu18.04.1 LTS を
Windows10の上に、VMwareによって構築した仮想環境で起動しています。
www.bioerrorlog.work


LinuxではじめてのC言語を実行する

vimのインストール

まずはテキストエディタvimをインストールします。 インストールする前に、とりあえずターミナルにvimについて聞いてみます。

$ vim
Command 'vim' not found, but can be installed with:

sudo apt install vim       
sudo apt install vim-gtk3  
sudo apt install vim-tiny  
sudo apt install neovim    
sudo apt install vim-athena
sudo apt install vim-gtk   
sudo apt install vim-nox  

vimのインストール方法を教えてくれました。 さっそくインストールします。

$ sudo apt install vim     

これでvimのインストールが完了です

vimでテキストの編集

vimを使ってC言語用の".c"ファイルを作成します。

$ vim test.c

このようにすると、test.cファイルのvimエディット画面に移行します。
vimのエディット画面は、いくらか慣れない挙動でした。

まず、"i"を押すことで"-- INSERT --"モードになり、普通に文字を編集することができます。
例えば、次のようにしてコードを書きます。

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("Hello, Lain.\n");
    return 0;
}

ごちゃごちゃと文字を書きましたが、とりあえずはprintf("Hello, Lain.\n");によって文字列”Hello, Lain.”が出力される、ということでよしとします。

書き終わったら、”Esc”を押して"-- INSERT --"モードを終了します。
この状態で":"を押すと、オプションを受けつけるようになります。
例えば、

:wで保存、
:qでvimの終了、
:wqと組み合わせると保存して終了、です。

他にも色々あるのでしょうが、今はこれがあれば十分でしょう。

ちなみに作成したファイルは、ターミナル上で削除できます。

$ rm test.c

これで先ほど作成したtest.cファイルが削除されました。


[関連記事] パスワード認証プログラムの作成 | リバースエンジニアリング入門#1


gccでコンパイルする

C言語で書かれたソースファイルは、コンパイルして実行ファイルを生成する必要があります。
gccは、そのコンパイラの一つです。 マニュアルを読む1と、

~
NAME
       gcc - GNU project C and C++ compiler
~

CとC++のコンパイラであることがわかります。 ちなみにこのgccマニュアルは、様々な拡張子の解説なども載っていて、なかなかに趣深いものでした。

vimと同じように、まずはインストールします。

$ sudo apt install gcc

インストールが完了したら、さっそく先程作成したtest.cをコンパイルします。

$ gcc test.c -o test

これは、test.cをコンパイルして、testという実行ファイルを作成する、というコマンドになります。
これで、コンパイル完了です。

ファイルの実行

ファイルを実行するには、実行ファイルのディレクトリをターミナルに打ち込みます。

$ ./test
Hello, Lain.

記念すべきはじめての文字列が表示されました。

ちなみに今回のtestファイルでは意味がありませんが、実行時に引数を与えることで、

$ ./test arg

testの実行時に引数argを渡して実行させることができます。


[関連記事] Ubuntuディスプレイ解像度の変更 | 1920x1080


パッケージのアンインストール

今回、vimやgccをインストールしましたが、このパッケージをアンインストールする方法を記しておきます。

インストール時に使用したaptコマンドのマニュアルを読みます。

~
           Removing a package removes all packaged data, but leaves usually small
           (modified) user configuration files behind, in case the remove was an
           accident. Just issuing an installation request for the accidentally removed
           package will restore its function as before in that case. On the other hand
           you can get rid of these leftovers by calling purge even on already removed
           packages. Note that this does not affect any data or configuration stored in
           your home directory.
~

removeはユーザーの設定ファイルを残してアンインストールするのに対し、purgeはすべてのファイルをアンインストールするようです。
使い方はそれぞれ次の通り。

$ sudo apt remove vim
$ sudo apt purge vim


おわりに

C言語でプログラミングするための簡単な環境構築、実行する手順を記録しました。

ここ最近はターミナル上のコマンドを使っていろいろと遊んでいましたが、いよいよプログラミング関係もやっていきたいと思っています。

気になるのは、やはりコンパイル後の実行ファイルに何が書かれているのか、という類のことです。

どうやってプログラミングするのか、という情報はたくさん目にしますが、どうやってプログラミングされているのか、という情報はあまり御目にかかれません。
LiveOverflow氏のバイナリハッキング動画などを参考にしながら、そういう方向の理解を進めていきたいと思います。


参考

Binary Exploitation / Memory Corruption by LiveOverflow - YouTube

manコマンドを理解する | Linuxコマンド - 生物系がゼロから始めるTech Blog


  1. マニュアルの読み方は、過去記事にまとめました。