Windows2000からUnixサーバにLAN経由でアクセスして、
gccコマンドでコンパイルしたCの実行オブジェクトファイルから
Cのソースを抽出する方法はありますでしょうか。
解答の程、宜しくお願い致します。

A 回答 (4件)

「元のソースに戻す」ことにこだわるのならばお決まりの答えとして「不可能」と


いうことになりますが,発想を変えて「機械語プログラムを,それと (ほぼ) 等価な
Cのソースに変換する」という意味に解釈するならば,ある程度は可能です.

http://q.hatena.ne.jp/1182501721

デコンパイル?について
http://okwave.jp/qa3043962.html
    • good
    • 0

C言語は静的にリンケージ処理してしまうため、関数名、変数名などは通常失われます(動的リンケージ用に外部公開しているものなどは別ですが・・・)。



あとは処理内容、いわゆるアルゴリズムですが、これはある程度コンパイラが特定できていれば逆変換はある程度は可能です・・・・が、最適化処理など不可逆な変換が入るためかなり難しいと思います。

現実的には逆アセンブル結果をもとに人手でCソースに起こし直す方が現実的でしょうね。実際には逆アセンブルでもコール位置を考慮してくれる逆アセンブラでないとまともに読めない場合がありますけど・・・特にIntel系の場合は。
    • good
    • 0

こんにちは。


実行モジュールから元のCソースへの変換は昔からできないのが常識でした。
今はどうなのでしょうかねー。完全回復は無理だと思いますが、ある程度違った形では回復可能とは個人的に思うのですが。

根本的な目的ななんなのでしょうか?
(1) ソースがどこかへ消えてしまったから復元したい。
(2) わけのわからないモジュールがあるので、ソースに復元し内容を理解したい。
(3) 仕様が明解なモジュールであるが、一部の仕様を他でも利用したいのでソースに復元して利用したい。
(4) 商用プログラムに手を加え、別な商品として売りたい(おいおい^^;)


違った方向から考えると解決の糸口がみつかるかも。
といいつつも、上の例なんかどうしようもないですね。
すいません。
    • good
    • 0

こんにちは。

itohhといいます。

アセンブラソースまでならば、戻せるでしょうが、Cのソースには戻せません。
    • good
    • 0
この回答へのお礼

自分でも極力調べてみましたが、探し当てられませんでした。
ありがとうございました。

お礼日時:2002/04/12 14:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qblenderでのマットオブジェクト作成方法

blenderとvoodoo camera trackerというソフトを用いてマッチムーブ動画を作ろうとしています。
カメラトラッキングは無事に終了し、後はマッチムーブさせたオブジェクトの影と反射を入れるだけの状態です。
ここで、その物体に映った影だけを表示するためのオブジェクトはマテリアル設定のonly shadowボタンにより実現できたのですが、
反射だけを表示するためのオブジェクトの作り方がわかりません。
blenderではそのようなオブジェクトの作成はできないのでしょうか?
できるのなら、その方法を教えていただきたいと思います。
よろしくお願いします。

Aベストアンサー

Planeを用意してRay Transp Fresnelで透明にしてRay Mirror RayMirで反射にしてみたらどうでしょう

QCとC++、どちらでコンパイルされているかをソース中で判別する方法

タイトルのとおり、CとC++のどちらでコンパイルされているのかを、ソース中で判別する方法(#ifなど)を教えて下さい。

目的は、extern "C" という記述がCではエラーになってしまうのですが、CでもC++でもインクルード可能なヘッダファイルにするため、ヘッダファイル中で
  #if「C++でコンパイル中」
    extern "C" {
  #endif
としたいのです。

よろしくお願い致します。

Aベストアンサー

#ifdef __cplusplus
または
#if defined(__cplusplus)
です。

#ifdef __cplusplus
extern "C"{
#endif
...
#ifdef __cplusplus
}
#endif

Qテキストボックスなどのオブジェクトの大きさを揃える方法。

OS:XP Excel2000
ばらばらの大きさのテキストボックスやオートシェイプをささっと揃える方法はありませんでしょうか?

Aベストアンサー

追加のご質問に対して

shiftキーを押しながら,揃える図形を
右クリックして,すべてを選択する。
ワークシートの左下
「図形の調整」→「配置/配列」
で整列させることができます。
あとは,すべてが選択されている状態で,
お好きな場所へドラッグして移動します。

Q「.c」拡張子でC++文法を使用したソースのコンパイルについて

すみません、C&C++初心者です。
よく分からないので教えて下さい。

「.c」拡張子のファイルなのですが、以下C++の文法が使用されたソースがあります。

・変数宣言が関数内の処理途中でされている
・構造体の変数宣言で「struct」の記述が省略されている
・const変数がswitch分のcaseラベルに使用されている

これを以下環境でコンパイルしたところ、エラーとならず正常終了しました。
OS:HP-UX
コンパイラ:aCC
です。
(ちなみにwindows環境(win2003sv、clコンパイラ)でコンパイルしたところ、想定通りC++文法箇所でエラーになりました)

自分なりに調べた限り、C++対応コンパイラというものは、拡張子によって
「.c」ならC言語、「.cc」「.cpp」ならC++、といった判断をしてコンパイルする、
といった記述がよく見受けられました。
しかし本件の場合、「.c」ですがC++の文法が許容されたということになります。

本サイトでも検索したところ、「C言語での変数宣言の場所」というご質問で
「新しいgccコンパイラでは、変数の途中処理宣言は許容されている」
という内容のものは確認できましたが、これに似たような現象なのでしょうか。

ご存じの方おりましたらご教授よろしくお願いいたします。

すみません、C&C++初心者です。
よく分からないので教えて下さい。

「.c」拡張子のファイルなのですが、以下C++の文法が使用されたソースがあります。

・変数宣言が関数内の処理途中でされている
・構造体の変数宣言で「struct」の記述が省略されている
・const変数がswitch分のcaseラベルに使用されている

これを以下環境でコンパイルしたところ、エラーとならず正常終了しました。
OS:HP-UX
コンパイラ:aCC
です。
(ちなみにwindows環境(win2003sv、clコンパイラ)でコンパイルしたとこ...続きを読む

Aベストアンサー

accは拡張子によるcとc++の判定をしません
拡張子がcまたはCで始まるファイルであればc++のソースとして使われます
accをANSI cコンパイラとして使うには何かオプションをつければいいはずです(-Aeかな)

Q【Blender】作成中のオブジェクトに変な面が出来てしまうのですが、理由が分かりません。

初心者です、詳しい方いらっしゃいましたら分析お願い致します。

重複した頂点の有無と法線の向きに問題がないかは一通りチェックしてみたのですが、下記の画像で示しているように、変な面が作成されてしまいます。
スムージングをかけているにも関わらず、突起があるのも不思議に思っています。

一人で困っている状態なので、助けになっていただけたら幸いです。
宜しくお願い致します。

Aベストアンサー

確証はありませんがBlenderのバグかグラフィックボードの問題かなと。
下記URLの記事が参考になるかも。

http://3dcg.homeip.net/3d_hardware/video_card/02_misconception.php

Qgccでc++プログラムをコンパイルできない

gccをインストールして使ってみたのですがc++のプログラムをコンパイルすることができません。
gcc test.ccとすると
gcc: error trying to exec 'cc1plus': execvp: そのようなファイルやディレクトリはありません
というエラーがでます。

ネットで調べたところg++かc++のようにコンパイルすればいいということでしたが、g++やc++とうつとcommand not found とでます。

gcc -versionで調べたところgccのバージョンは
gcc (GCC) 4.3.0 20080428 (Red Hat 4.3.0-8)
です。

環境はfedora9です。fedora9をインストールしたときにgccがインストールされていなかったので
yum install gcc
でインストールしたのですが、これがまずかったのでしょうか?

分かっている方からするとトンチンカンな質問かもしれないのですが、どなたかよろしくお願いします。

Aベストアンサー

yum install gcc-c++
としてみたらどうでしょうか?

QBlenderとPythonについて

Blenderを勉強中の者です。
BlenderはPythonが必要だと知ってBlenderとPythonをインストールしました。

それぞれのバージョンは、
-Blender ver 2.69
-Python ver 3.3.0
です。

ですが、BlenderがPythonを"認識しているか"又は"認識させる"方法がわかりません。
ver2.6以降のBlenderはPythonが同梱されているという記事も見たことありPythonを
個別にインストールしなくてもいいのか???など
実際、詳しいことが一切わかりませんでした。

今からBlenderを始めるにあたって何をインストールしてどんな初期設定をすればいいか
教えて下さい。

質問がとっちらかってすみません。出来るだけまとめたつもりです。
よろしくお願いします。

Aベストアンサー

Pythonが同梱されているのでインストールしなくても使えます

http://tips.hecomi.com/entry/20120818/1345307205

Blenderは初期の状態でも使えます。なれてきたら、自分のやりたいことに必要なものをインストールやカスタマイズすればいいと思います

QC#のコマンドラインの分割コンパイルと実行について

コマンドラインでC#のプログラムをコンパイルと実行する方法

mainが1つでsubが1の場合は以下にある。
http://d.hatena.ne.jp/taka_2/20080124/p6

mainが1つでsubが2つの場合はコマンドはどうするか。

以下に使用したコマンドを示す
csc /target:library sub1.cs
csc /target:library sub2.cs
csc /R:sub1.dll /R:sub2.dll main1.cs
とすると
error CS0246: 型または名前空間名 'sub1' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。
のエラーメッセージが表示される。

わかっている方がおりましたら、教えて下さい。

以下にプログラムを示す。
//----------------------------------------------------------------------------
// mainファイルの内容
using System ;
using System.Text;
using System.IO;
using sub1 ; // subの名前空間を指定(分割コンパイル用)
using sub2 ; // subの名前空間を指定(分割コンパイル用)

namespace main1
{
class Program
{
static void Main(string[] args)
{
int a = 10 ;
int b = 5 ;
sub1.dfsub_cs1 df1 = new sub1.dfsub_cs1() ; // sub1のクラスを確保(分割コンパイル用)
sub2.dfsub_cs2 df2 = new sub2.dfsub_cs2() ; // sub2のクラスを確保(分割コンパイル用)
Console.Write("add {0,3:D} * {1,3:D} = {2,5:D}\n", a,b, df1.multiply( a, b) );
Console.Write("add {0,3:D} / {1,3:D} = {2,5:D}\n", a,b, df2.divide( a, b) );
return ;
}
}
}

//----------------------------------------------------------------------------
// sub1ファイルの内容

namespace sub1
{
public class dfsub_cs1
{
public int multiply(int a, int b )
{
return a * b ;
}
}
}
//----------------------------------------------------------------------------
// sub2ファイルの内容
namespace sub2
{
public class dfsub_cs2
{
public int divide(int a, int b )
{
return a / b ;
}
}
}

コマンドラインでC#のプログラムをコンパイルと実行する方法

mainが1つでsubが1の場合は以下にある。
http://d.hatena.ne.jp/taka_2/20080124/p6

mainが1つでsubが2つの場合はコマンドはどうするか。

以下に使用したコマンドを示す
csc /target:library sub1.cs
csc /target:library sub2.cs
csc /R:sub1.dll /R:sub2.dll main1.cs
とすると
error CS0246: 型または名前空間名 'sub1' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています...続きを読む

Aベストアンサー

> csc /target:library sub1.cs
> csc /target:library sub2.cs
> csc /R:sub1.dll /R:sub2.dll main1.cs

私の環境では示されているコマンドラインで正常にコンパイルされ
作成されたexeも問題なく実行できました。

お使いのsub1.csに本当にnamespace sub1が
定義されているかご確認ください。
きちんと定義されている場合はすべてのファイルを
フルパスで指定するとどうなるでしょうか。
sub1.cs、sub2.cs、main1.cs が c:\tempにあるとしたら

csc /target:library /out:c:\temp\sub1.dll c:\temp\sub1.cs
csc /target:library /out:c:\temp\sub2.dll c:\temp\sub2.cs
csc /R:c:\temp\sub1.dll /R:c:\temp\sub2.dll /out:c:\temp\main1.exe c:\temp\main1.cs

とか。

> csc /target:library sub1.cs
> csc /target:library sub2.cs
> csc /R:sub1.dll /R:sub2.dll main1.cs

私の環境では示されているコマンドラインで正常にコンパイルされ
作成されたexeも問題なく実行できました。

お使いのsub1.csに本当にnamespace sub1が
定義されているかご確認ください。
きちんと定義されている場合はすべてのファイルを
フルパスで指定するとどうなるでしょうか。
sub1.cs、sub2.cs、main1.cs が c:\tempにあるとしたら

csc /target:library /out:c:\temp\sub1.dll c:\temp\sub1.cs
csc...続きを読む

Qblenderかmetasequoiaか

3DのCGを作って、最終的にOpenGLで動かしたいと思っています。
今までOpenGLで頂点指定して3次元物体を
描画していたのですが、
blenderかmetasequoiaでモデリングして
それをOpenGLで読み込んで動かすことができると聞きました。

そこで、blenderかmetasequoiaを使おうと
思っており、どちらを使うか迷っております。
windowsとlinuxのデュアルブートになってるんですが、
基本的にlinuxで作業することが多いので
linuxでも動くblenderが良いかなと思っているのですが、
blenderは使いにくい、という話も聞きました。
たしかにblenderはパッと見、情報も少なそうで
インタフェースも分かりにくそう・・・と思いました。

みなさんはどちらを使っていますか??
どちらがオススメですか??

Aベストアンサー

私は、blenderをwindowsとubuntuで使ってます。

blenderは、確かに、使いにくいとか挫折したって話はよく聞きます。
でも、最初は、基本的な操作とよく使うウィンドウのパネルの設定を覚えるといいと思います。

http://f11.aaa.livedoor.jp/~hige/index.php?%5B%5B%CC%DC%BC%A1%5D%5D
Blender Documentation 日本語版

http://wbs.nsf.tc/tutorial/tutorial_blender.html
WBS+ Blender チュートリアル


http://bmania.blog70.fc2.com/
Blenderで3DCG制作日記

Pythonが使えるのでスクリプトで描画することもできます。
(情報は少なく苦労しました)

http://www.geocities.co.jp/SiliconValley-Cupertino/2019/blender/PythonDocJpn/index.html
The Blender Python API Reference 日本語版

http://d.hatena.ne.jp/gomi-box/20080519/1211159996
OpenGLで遊ぼう


http://video.google.com/videosearch?hl=en&source=hp&q=blender%20tutorial&um=1&ie=UTF-8&sa=N&tab=wv#q=blender+tutorial&hl=en&view=2&emb=0
bleder tutorial

このほかにも、パーティクルや液体のシュミレーションや物理のシュミレーション、ノードエディタで動画のエフェクト(クロマキーやブラーなど)できたりしますのいいですよ!

私は、blenderをwindowsとubuntuで使ってます。

blenderは、確かに、使いにくいとか挫折したって話はよく聞きます。
でも、最初は、基本的な操作とよく使うウィンドウのパネルの設定を覚えるといいと思います。

http://f11.aaa.livedoor.jp/~hige/index.php?%5B%5B%CC%DC%BC%A1%5D%5D
Blender Documentation 日本語版

http://wbs.nsf.tc/tutorial/tutorial_blender.html
WBS+ Blender チュートリアル


http://bmania.blog70.fc2.com/
Blenderで3DCG制作日記

Pythonが使えるのでスクリプトで描...続きを読む

QCソースをexeにコンパイルする

Cソースをexeにコンパイルする

http://freenx.berlios.de/download.phpに置いてあるfreenx-X.Y.Z.tar.gzをWindows上で動作するexeにコンパイルしたいのですが、うまくできませんでした。使用しているOSはWindows XPです。

cygwinをインストールしてtar.gzを展開したフォルダまで行き、makeを実行しましたが、以下のようなエラーがでました。
http://pastebin.com/bfQtMFyW

この方法でexeにできるのかどうかも分からないのですが、もし別の方法があるなら教えてください。お願いします。

Aベストアンサー

> cygwinをインストールしてtar.gzを展開したフォルダまで行き、makeを実行しましたが、以下のようなエラーがでました。
> http://pastebin.com/bfQtMFyW
>
> この方法でexeにできるのかどうかも分からないのですが、もし別の方法があるなら教えてください。お願いします。

質問の最初にお書きになっているページに(freenx-X.Y.Z.tar.gzの少し下)『Read the building instructions at http://www.nomachine.com/………』と構築方法を説明したページが書かれていますので参照すると良いかと思います。

最初の回答に書かれているようにmakeの前にconfigureを行い導入している環境に適合したMakefileを作り直してもらう必要があるかと思います。
その前に環境変数を設定して共有ライブラリの場所を教えたり(export LD_LIBRARY_PATH=……)必要なソフトを確実に導入しておく必要があるかも知れません。
※ Cygwinのsetupで導入するソフトを選んだかと思いますが、構築方法の説明を見てKDEやGNOMEなどの構築するソフトで使う部品も導入しておく必要があるかも知れません。

makeだけで構築できるソフトはほとんどないかと思います。
configureなりxmkmf・imakeなりで調整し環境にあったMakefileを作ってmakeを行う(makeを行う前にいくつかの準備作業を行う)のが普通かと思います。
※ いきなりmakeするソフトの場合にはMakefileを編集して調整する必要がある場合が多いです。


楽しんで挑戦してみてください。

> cygwinをインストールしてtar.gzを展開したフォルダまで行き、makeを実行しましたが、以下のようなエラーがでました。
> http://pastebin.com/bfQtMFyW
>
> この方法でexeにできるのかどうかも分からないのですが、もし別の方法があるなら教えてください。お願いします。

質問の最初にお書きになっているページに(freenx-X.Y.Z.tar.gzの少し下)『Read the building instructions at http://www.nomachine.com/………』と構築方法を説明したページが書かれていますので参照すると良いかと思います。

最初の回答に...続きを読む


人気Q&Aランキング

おすすめ情報