2016-12-12 5 views
5

私は実行ファイルの中に、からと呼ぶ関数を配置しました。 OllyDbgによると、そのアドレスは0x0090DE00となります。私はそれを直接呼び出すようにしようとしました:ロードされたDLLから実行可能ファイルにある関数を呼び出す方法はありますか?

luaL__openlib *f = ((luaL__openlib*)(module_handle + 0x0090DE00)); 

hereが示唆したように、それにモジュールハンドルの塩基を添加すると:

uint8_t * module_handle = (uint8_t *)GetModuleHandle(L"ForgedAlliance1.exe"); 

luaL__openlib *f = ((luaL__openlib*)(module_handle + 0x0090DE00)); 

私がアクセスを取得し、これは動作しないことが表示されます違反の例外 - ポインタが有効ではないようです。

So:どうすればこのアドレスを使ってこの関数を呼び出すことができますか?


私はちょうど0x00C0B530でシンプルなRET命令を挿入します。今のように見えるん私のコードは次のとおりです。

例外ForgedAlliance1.exeに0x909090C3で投げ::私は例外メッセージで別のアドレスを取得し、なぜ私はかなり理解していない何

typedef void (*test)(); 

EXTERN_DLL_EXPORT void initialize(lua_State *L) 
{ 
    // Adding this should not be necessary. I get 0x00C0B530 from 
    // OllyDbg where the offset 0x00401000 is included 
    uint8_t * module_handle = (uint8_t *)GetModuleHandle(L"ForgedAlliance1.exe"); 

    test *f = NULL; 

    f = ((test*)(0x00C0B530)); 

    (*f)(); // Crashing 
} 

がある0xC0000005 :アクセス違反実行場所0x909090C3


UPDATE:は、私はちょうどそれがコード自体

90 | NOP 
90 | NOP 
90 | NOP 
C3 | RETN 

である私はポインタで何かをめちゃくちゃにしていますようだ、0x909090C3はここだけでポインタでないことに気づきました。なぜ "場所" 0x909090C3を実行しようとしますか?それは場所ではありません。

+1

ollyを調べるとき、関数が 'ForgedAlliance1.exe'が使用する別のモジュールの中に格納されておらず、正確には実行可能ファイル自体ではないことを確認しましたか? – Bauss

+0

@Bauss Hm、私はこれに少し新しかったですが、私はどのように私はアドレスを得たかを伝えることができます:私は実行可能ファイルを開いたばかりです。私はそれを介してデバッグすると、私は開始アドレスが '0x00401000'であることがわかります。だから私は、この特定のウィンドウに表示されているすべてが実行可能ファイルであると仮定しています。実行ファイルのアセンブリコードにいくつかの変更を保存するたびに、実行可能ファイル 'ForgedAlliance1.exe'を上書きしています。だから、OllyDbgが私の記憶の他の領域を表示しない限り、アドレスは正確であり、実行可能ファイルの一部でなければなりません。 – displayname

+1

あなたはこの記事を見ましたか? https://www.codeproject.com/articles/1045674/load-exe-as-dll-mission-possible – Alden

答えて

2

いいえ、それはちょうどポインタmess-upでした。申し訳ありませんが - かなりの間、Cに書きませんでした。私は基本的には、右のそれをしなかったが、

f = ((test*)(0x00C0B530)); 
(*f)(); 

の問題は(*f)0x909090C3であること、である - 実行可能な内部命令を - と、このプログラムはもちろん、無効であるにジャンプしようとするアドレスです。

だからトリックでした:

int test_addr = 0x00C0B530 
f = ((test*)(&test_addr)); 
(*f)(); 

が、私はこれは少し単純に行うことができますが、これは今働いていると確信しています。

関連する問題