概要 †
関数にジャンプ(分岐)します。
ジャンプ先の関数でretをしてもジャンプ元の関数には戻ってきません。
書式 †
グローバル関数
jmp <関数の戻り値の型> <関数名>()
クラスの静的メンバ関数
jmp <関数の戻り値の型> [<ライブラリ名、名前空間名など>]<クラス名>::<関数名>()
クラスのメンバ関数
jmp instance <関数の戻り値の型> [<ライブラリ名、名前空間名など>]<クラス名>::<関数名>()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
!
-
|
|
|
|
|
!
|
.assembly test{}
.method static void main()
{
.entrypoint
ldstr "She " call void class [mscorlib]System.Console::WriteLine( string )
jmp void abuse()
ldstr ", and didn't come back" call void class [mscorlib]System.Console::WriteLine( string )
ret
}
.method static void abuse()
{
ldstr "tripped" call void class [mscorlib]System.Console::WriteLine( string )
ret
}
|
実行結果:
She
tripped
C#では・・・
表現できません;
VB.NETでは・・・
表現できません;