掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
dcc32のoffsetについて (ID:44891)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
とりあえず直って良かったです。恐縮させてしまってこちらこそすみません。 「要領不十分でもったいない質問者さん」には、なるべく早い段階で指摘させてもらおうと思ってます。 もうほぼ解決した模様なので周回遅れではありますが、いくつか。 >AllocMemを使って動的にメモリを設定していたんですが、もちろんメモリ解放もやっていたんですが AllocMem & FreeMem でなく、GetMem+FillChar & FreeMem だとどうでしょうね。変わるわけないか? dcc32 について。おそらくやまださんは dcc32 -f<offset> hogehoge.dpr に従って、 dcc32 -f77BD2 hogehoge.dpr とか記述したと思うのですが…。 >4文字目から77BD2や78BD2を書きましたが、サイトのようにソース位置が出なくて、バージョン番号だけが出ました 私もいろいろ試してみました。で、↑この状態は、hogehoge.dpr にアクセスできてない際のレスポンスです。(dcc32、無口すぎて困る。)アクセスできてればとりあえず Target address not found. とか出ます。 この下に、「間違いのない、確実な使い方」を載せておきます。 (なお、D6の dcc32 は、対象のパス名が長いとレスポンスの表示がおかしくなることもありました。) ※ただし、今回のやまださんの問題解決に役立ちはしなかったと推測しています。それは、アドレスが E8C77BD2 などという高い値だからです。これはDelphiのコードがある範囲ではないと思ってますので。 それと関連することなんですが、示されたアドレスが0045E1D9のような時にオフセットを5E1D9とするのは、 「4文字目から」というより、$00400000(量にして4MB分)を減じるからです。結果として下5桁になると。 詳しくは以下を参照してください。(実は私もよく分かってません \(^o^)/) ☆Delphiリファレンス - Delphiコンパイラ指令のリスト - イメージのベースアドレス $IMAGEBASE http://docwiki.embarcadero.com/RADStudio/XE4/ja/%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%AE%E3%83%99%E3%83%BC%E3%82%B9%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9 ☆意図的に Access Violation を起こすコード procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ShowMessage(TObject(nil).ClassName); end; ☆これをデバッグでなくexe単体で実行。すると、このようなエラーダイアログが。 >Access violation at address 0045A089 in module 'Project1.exe'. Read of address 00000000. ☆エラーのソース位置を調べる ------------------------------------------------------------------------------- 1. コマンドプロンプトを起動する。 2. 「cd コマンド」等でターゲットとなるプロジェクトの .dpr のあるディレクトリへ移動する。 cd "C:\Program Files\Borland\Delphi6\Projects\Access Violation Test" 3. dcc32で "Find error" を実行する。 dcc32.exe -f5A089 Project1.dpr 4. その結果。 C:\Program Files\Borland\Delphi6\Projects\Access Violation Test>dcc32.exe -f5A089 Project1.dpr Borland Delphi Version 14.0 Copyright (c) 1983,2002 Borland Software Corporation Project1.dpr(14) Unit1.pas(27) Target address found. ShowMessage(TObject(nil).ClassName); ^ ------------------------------------------------------------------------------- ・ Delphi/RAD Studioのbinディレクトリへのパスが通っていることが前提。(システム環境変数 Pathを確認) ・ 上記内容はDelphi6 Personalのものなので、最近のバージョンとはディレクトリ等が違います。ご注意。 ・ 標準以外のライブラリを使用している場合は、-uオプションでライブラリパスを追加指定する模様。 (標準のライブラリは dcc32.cfg に記述されているため、指定不要。)
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.