議論/DLL/エントリポイント/04.callの実験バイナリ列


Top / 議論 / DLL / エントリポイント / 04.callの実験バイナリ列

このページは何か? (by ひげぽん)

そろそろ核心部分です。

ndisasm -u call.oの一部

00000130  55                push ebp
00000131  89E5              mov ebp,esp
00000133  81EC08000000      sub esp,0x8
00000139  8B4508            mov eax,[ebp+0x8]
0000013C  FFD0              call eax
0000013E  C9                leave
0000013F  C3                ret

こんな感じです。

main.cpp

上記コードをメモリ上に直接置くとどうでしょうか。

unsigned char code[] = {0x55,0x89,0xE5,0x81,0xEC,0x08,0x00,0x00,0x00,0x8B,0x45,0x08,0xFF,0xD0,0xC9,0xC3};
void hello()
{
    printf("hello\n");
}
int main(int argc, char *argv[])
{
    void (*call_func)( void (*)(void) ) = (void (*)( void (*)(void) ))code;
    (*call_func)(hello);
    return 0;
}

ちょっと悪い事しているかな。

実行

nobita% ./dynamic_code3
hello

出来ました。

ちなみに code をheapにコピーしても動きました。

コメント

コメントはありません。 コメント/議論/DLL/エントリポイント/04.callの実験バイナリ列?

お名前:

MENU

now: 5

リンク


最新の20件
2018-10-07 2018-09-20 2018-09-03 2018-05-09 2017-09-29 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-05-29 2015-12-28 2013-02-25 2013-02-21 2013-02-20 2013-02-12 2013-02-11 2013-02-10
最新の20件
2010-02-01 2010-01-31 2010-01-30 2010-01-29 2010-01-16

Counter: 1287, today: 1, yesterday: 0

リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS

Last-modified: 2008-03-28 (金) 15:48:02 (3859d);  Modified by mona
PukiWiki 1.4.6 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-ji
Powered by PHP 5.2.17
HTML convert time to 0.018 sec.