議論/DLL/エントリポイント/02.callの実験C++


Top / 議論 / DLL / エントリポイント / 02.callの実験C++

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

本当はアセンブラで書いてアセンブルしてバイナリ列を該当部に使って終わりなのですが寄り道。

引数で受け取ったアドレスの関数を call する関数を書いてアセンブリのコードを眺めます。
unsined int なのはお行儀が良くないですが気にしないでください。

void call_func(unsigned int func)
{
    ((void(*)(void))func)();
}

これを -S でアセンブラにすると核心部分

.globl _Z9call_funcj
	.type	_Z9call_funcj, @function
_Z9call_funcj:
.LFB2:
	push	%ebp
.LCFI0:
	mov	%ebp, %esp
.LCFI1:
	sub	%esp, 8
.LCFI2:
	mov	%eax, DWORD PTR [%ebp+8]
	call	%eax
	leave
	ret

予想通りスタックに引数を積んで、eaxに入れて call して戻ってます。

つまり動的にアドレスを渡されて、それを call したければ eax にでもアドレスを入れて call すれば良いということが分かります。(周り道だなw)

コメント

コメントはありません。 コメント/議論/DLL/エントリポイント/02.callの実験C++?

お名前:

MENU

now: 3

リンク


最新の20件
2018-05-03 2017-09-29 2017-04-25 2017-01-10 2016-12-11 2016-10-04 2016-08-14 2016-06-05 2016-05-29 2016-04-15 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: 2547, today: 1, yesterday: 0

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

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