ソースコードとオブジェクトコードについてみていきましょう。これらはそれぞれさまざまな呼び方がありソースコード(ソースプログラム、原始プログラム)、オブジェクトコード(オブジェクトプログラム、目的モジュール、目的プログラム、バイナリコード)とも呼ばれます。
ソースプログラム
ソースプログラムはいわゆる一般的にイメージされるプログラム言語によるコードです。以下GO言語でのコードになります。
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
ソースプログラムは人間が読みやすく、編集もしやすい自然言語に似せた形で記述され、コマンドやテキストエディタで書いたり開くことができます。
コンパイル
コンパイルとは人間用に書かれたソースプログラムをコンピュータが理解できる形であるバイナリ(0と1)の形に変換する作業になります。
GO言語の場合は以下のコマンドを実行するとコンパイルできます。
go build -o hello
するとhelloというファイルが生成されます。これがオブジェクトプログラムになります。
オブジェクトプログラム
オブジェクトプログラムは実行できます。まずは動かしてみます。以下のコマンドを実行してみました。
% ./hello
Hello, World!
「Hello, World!」という文字が表示されました。
テキストエディタで中身を見てみる
オブジェクトプログラムはテキストエディタで開いてみると以下のようになります。(※GO言語でMacの環境で実行したところファイルが実行できなくなりましたので試す際はテストファイルで行ってください。)
![](https://www.xn--4grr4jzer0z13b8ydc6hw8c14slx0cfdtdwftp3d.website/wp-content/uploads/2024/02/スクリーンショット-2024-02-05-11.18.40-1024x410.png)
0と1で書かれているとのことでしたがそれを具体的に確認するには特別なツールが必要そうでした。取り急ぎ16進数で表示できるプラグインがマイクロソフトから出ていたのでHex Editorというプラグインを使用してみてみます。すると以下のようになりました。
![](https://www.xn--4grr4jzer0z13b8ydc6hw8c14slx0cfdtdwftp3d.website/wp-content/uploads/2024/02/スクリーンショット-2024-02-05-10.59.06-892x1024.png)
これであればギリギリ理解できますし、0と1でできているというのも実感できると思います。
上記はファイルの一部で全体としては1万行を超えていたと思いますがHello World!と表示するだけでもこれだけのコードが動いているのはすごいですね。
著作権について
著作権はソースプログラム、オブジェクトプログラム共に保護の対象になりますがこの記事で解説した内容がわかっていると迷うこともなくなると思います。リバースエンジニアリングでオブジェクトプログラムからソースプログラムというのもできそうですし、そうなるとこれらのファイルは一心同体と言っても良いのかも知れません。
コメントを残す