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


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

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

またまた実験

00000000  55                push ebp
00000001  89E5              mov ebp,esp
00000003  B878563412        mov eax,0x12345678
00000008  FFD0              call eax
0000000A  C9                leave
0000000B  C3                ret

ということはきっとこんなことが出来るはず

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

動きました。

nobita% ./dynamic_code4
hello

最初いろいろ間違えてセグフォまくったので、0xEBFEをはさみまくって原因を追求した。

1個呼べれば2個呼べるはず。
ちょっと汚いけど。

void hello()
{
    printf("%s\n", __func__);
}
void goodbye()
{
    printf("%s\n", __func__);
}
int main(int argc, char *argv[])
{
    unsigned char code[128];
    code[0] = 0x55;
    code[1] = 0x89;
    code[2] = 0xE5;
    code[3] = 0xB8;
    *(unsigned int*)(&code[4]) = (unsigned int)hello;
    code[8] = 0xFF;
    code[9] = 0xD0;
    code[10] = 0xB8;
    *(unsigned int*)(&code[11]) = (unsigned int)goodbye;
    code[15] = 0xC9;
    code[16] = 0xFF;
    code[17] = 0xD0;
    code[18] = 0xC3;
    void (*call_func)(void) = (void (*)(void))code;
    (*call_func)();
    return 0;
}

結果

nobita% ./dynamic_code5 
hello
goodbye

コメント

コメントはありません。 コメント/議論/DLL/エントリポイント/05.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: 1933, today: 1, yesterday: 0

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

Last-modified: 2008-03-28 (金) 15:48:02 (3885d);  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.034 sec.