結果の実行可能ファイルは、実行可能ファイルをコンパイルしたプラットフォームとABI互換のプラットフォームで実行できます。ABI互換性とは、基本的に、同じ物理プロセッサアーキテクチャとOSインターフェイス(および呼び出し規約)が2つの(場合によっては異なる)OSで使用されることを意味します。たとえば、FreeBSDにはLinux ABI互換性が含まれているため、FreeBSDシステム(同じプロセッサタイプ)でLinux用にコンパイルされたバイナリを実行できます。ただし、ハッカリーが行われない限り、他のすべてのタイプのユニスでバイナリを実行できない場合があります。たとえば、LinuxでMac OS Xアプリケーションを実行することはできませんが、この人はLinuxでいくつかのOS Xコマンドラインツール(GCCコンパイラ自体を含む)を使用できるソリューションを持っています。
リバースエンジニアリング:マシンコードからCコードを生成することを目的とした逆コンパイラーは確かにありますが、(まだ)それほど強力ではありません。この理由は、それらが本質的に書くのが非常に難しいからです。マシンコードパターンを認識する必要がありますが、それでも元の情報をすべて収集することはできません。たとえば、ループのタイプ、コメント、非静的ローカル変数名、およびほとんどのタイプは、コンパイルプロセス中にすべて失われます。たとえば、次のようなCソースファイルがある場合:
int main(int argc, char **argv)
{
int i;
for (i = 0; i < 10; i++)
{
printf("I is: %d\n", i); /* Write the value of I */
}
return 0;
}
C逆コンパイラーは、次のコードを再構築できる場合があります。
int main(int _var1, void *_var2)
{
int _var3 = 0;
while (_var3 < 10)
{
printf("I is: %d\n", _var3);
_var3 = _var3 + 1;
}
return 0;
}
しかし、これはこのようなかなり高度な逆コンパイラーになります。