喫茶XRAYトップページ


[7617] アセンブリ言語と...返信 削除
2014/5/26 (月) 13:17:47 Mr.XRAY
次の記事を追加しました
[006_究極の選択 - アセンブリ言語と PE ヘッダ]
http://mrxray.on.coocan.jp/Delphi/plSamples/006_Assembler_exe.htm

「未処理問い合わせ... 」 というテキストファイルがあり,
そこに,ネット上の,あるいは,問い合わせがあった内容で未処理のことを書いています.

その中からいくつかを,[006] の記事に無理やりこじつけてみました.
他のサンプルの記事にも,無理やりむ結びつけているのがありますが... (^^;


□ ----  質問・問い合わせ 1 ------
作成した EXE のサイズが大きくなります.小さくする方法は ?

回答
Delphi を使うのをあきらめて,アセンブリ言語で開発しましょう(笑).


□ ----  質問・問い合わせ 2 ------
EXE の内容を 16 進数表示したいのですが ?

回答
以下を参考にしてください.
http://mrxray.on.coocan.jp/Delphi/plSamples/006_Assembler_exe.htm#02


□ ----  質問・問い合わせ 3 ------
(Dephi 2007 以前のコードを提示して)
次のコードで,1 バイト目と 2 バイト目で,全角と半角を判定しましたが,
うまくいきません.当方は,Delphi XE です.

回答
ユニコードな文字は 1 バイト目と 2 バイト目のコードでは判定はできません.
MECSUtils を使用してください.
http://mrxray.on.coocan.jp/Delphi/plSamples/006_Assembler_exe.htm#fig11
http://ht-deko.minim.ne.jp/tech021.html


□ ----  質問・問い合わせ 4 ------
Delphi で作成した EXE を逆コンパイルするには ?

回答
これ以上のことは期待できません.
http://mrxray.on.coocan.jp/Delphi/plSamples/006_Assembler_exe.htm#03


□ ----  質問・問い合わせ 5 ------
ソースコードを無くしてしまいました.EXE からソースコードを取り出せますか ?

回答
できません.以下の[備考}を参考にしてください.
http://mrxray.on.coocan.jp/Delphi/plSamples/006_Assembler_exe.htm#03


□ ----  質問・問い合わせ 6 ------
ファイルが EXE なのか DLL なのかを拡張子でなく,
ファイルの中身から知ることはできますか ?

回答
以下を参考にしてください.
http://mrxray.on.coocan.jp/Delphi/plSamples/006_Assembler_exe.htm#04


□ ----  質問・問い合わせ 7 ------
EXE がコンソールアプリがどうかを知る方法はありますか ?

回答
以下を参考にしてください.
http://mrxray.on.coocan.jp/Delphi/plSamples/006_Assembler_exe.htm#04


□ ----  質問・問い合わせ 8 ------
DLL 内のエクスポート関数の一覧を取得したいのですが

回答
以下を参考にしてください.
http://mrxray.on.coocan.jp/Delphi/plSamples/006_Assembler_exe.htm#05


□ ----  質問・問い合わせ 9 ------
EXE ファイルの PE ヘッダの内容を取得したいのですが

回答
以下を参考にしてください.
http://mrxray.on.coocan.jp/Delphi/plSamples/006_Assembler_exe.htm#04


[7618] Re:アセンブリ言語と...返信 削除
2014/5/26 (月) 17:48:50 Mr.XRAY
> □ ----  質問・問い合わせ 4 ------
> Delphi で作成した EXE を逆コンパイルするには ?
>
> 回答
> これ以上のことは期待できません.
> http://mrxray.on.coocan.jp/Delphi/plSamples/006_Assembler_exe.htm#03


こういうのは,数値計算の誤差と同じで,どうしてそうなるかを理解することが
必要ですよね.
コンパイラは,ソースコードから,機械語を生成します.
一度機械語になると,それが,Delphi から作成されたのか,C++ から作成
されたのかを知る,直接の方法はありません.


[7619] Re:アセンブリ言語と...返信 削除
2014/5/27 (火) 18:30:13 たてぐや
▼ Mr.XRAYさん

> □ ----  質問・問い合わせ 4 ------
> Delphi で作成した EXE を逆コンパイルするには ?
>
> 回答
> これ以上のことは期待できません.


 これができるのなら書き直したいのが3つほどあるんですけどね。

 アセンブラ、Z80の頃からCP/Mまでやったことがあります。なによりプログラ
ムが小さくなるのが魅力でした。今思い浮かべると、レジスターがどうこうと
か、スタックとか、よくあんな難しいことを出来たものだと思います。
 へ? それは年齢のせいで理解力が低下しただけなんじゃないかって?
おっしゃるとおりです。


[7620] Re2:アセンブリ言語と...返信 削除
2014/5/27 (火) 19:23:16 Mr.XRAY
▼ たてぐやさん

>  これができるのなら書き直したいのが3つほどあるんですけどね。

ハハハッ.
昔,逆コンパイルで,C++ のコードにするやつを見たことがあります.
逆アセンブリのコードから作るわけですから,何と言いましょうか.
それを作った人は,すごいですよね.

>  へ? それは年齢のせいで理解力が低下しただけなんじゃないかって?
> おっしゃるとおりです。


それもあるかもしれませんが (?)
そういう状況には戻りたくない気持ちもありますからねぇ.


[7632] 逆コンパイルと元のソースコード返信 削除
2014/5/31 (土) 14:47:45 Mr.XRAY
> ソースコードを無くしてしまいました.EXE からソースコードを取り出せますか ?
>
>回答
>できません.以下の[備考}を参考にしてください.


初心者というか,プログラミングの入門者の方に,
誤解のないように説明しておきますと,

EXE から逆コンパイラというのがあります.フリー,有料もあります.
これは,EXE から

http://mrxray.on.coocan.jp/Delphi/plSamples/006_Assembler_exe.htm#list3

のような内容を取得して,それを,ある開発言語のコードにするものです.
この時,「元のソースコード」にするわけではなく,
「ある開発言語の,予想されるコード」にするものです.

例えば,

procedure TForm1.Button1Click(Sender: TObject);
var
  S : String;
  I : Integer;
begin
  S := 'A';
  I := StrToInt(S);
end;

は「元のソースコード」です.で,StrToInt; は,内部で,

function StrToInt(const S: string): Integer;
var
  E: Integer;
begin
  Val(S, Result, E);
  if E <> 0 then ConvertErrorFmt(@SInvalidInteger, [S]);
end;

という 「Delphi のコード」を実行しています.
さらに,ConvertErrorFmt も,別の 「Delphi のコード」を実行しています.
これ以上は説明する必要はないでしょう.

更に言うと,Delphi のコードに逆コンパイルするというのは,
どのバージョンの Delphi のコードにするかにも注目する必要があります.



INCM/CMT
Cyclamen v3.82