C#中有委托,actionscript中有 function类型等这些于C语言中的函数指针有什么关系呢,在汇编中又是怎么样对应的呢?今天我们来总结一下:
ActionScript:
java
C#
delegate void dosomething(string name);
class demo
{
public void test(string name)
{
System.Console.WriteLine(name);
}
}
class Program
{
static void Main(string[] args)
{
demo d = new demo();
dosomething d3o = d.test;
d3o("hello word");
}
}
00000000 push ebp
00000001 mov ebp,esp
00000003 push edi
00000004 push esi
00000005 push ebx
00000006 sub esp,40h
00000009 mov esi,ecx
0000000b lea edi,[ebp-4Ch]
0000000e mov ecx,10h
00000013 xor eax,eax
00000015 rep stos dword ptr es:[edi]
00000017 mov ecx,esi
00000019 mov dword ptr [ebp-3Ch],ecx
0000001c cmp dword ptr ds:[007A0AE8h],0
00000023 je 0000002A
00000025 call 5BA747B7
0000002a xor edx,edx
0000002c mov dword ptr [ebp-44h],edx
0000002f xor edx,edx
00000031 mov dword ptr [ebp-40h],edx
00000034 nop
demo d = new demo();
00000035 mov ecx,7A1A98h
0000003a call FFF3FD48
0000003f mov dword ptr [ebp-48h],eax
00000042 mov ecx,dword ptr [ebp-48h]
00000045 call FFF5A468
0000004a mov eax,dword ptr [ebp-48h]
0000004d mov dword ptr [ebp-40h],eax
dosomething d3o = d.test;
00000050 mov ecx,7A1B50h
00000055 call FFF3FD48
0000005a mov dword ptr [ebp-4Ch],eax
0000005d mov eax,22C818h
00000062 push eax
00000063 mov ecx,dword ptr [ebp-4Ch]
00000066 mov edx,dword ptr [ebp-40h]
00000069 call 5AAC1918
0000006e mov eax,dword ptr [ebp-4Ch]
00000071 mov dword ptr [ebp-44h],eax
d3o("hello word");
00000074 mov edx,dword ptr ds:[02822188h]
0000007a mov ecx,dword ptr [ebp-44h]
0000007d mov eax,dword ptr [ecx+0Ch]
00000080 mov ecx,dword ptr [ecx+4]
00000083 call eax
00000085 nop
}
00000086 nop
00000087 lea esp,[ebp-0Ch]
0000008a pop ebx
0000008b pop esi
0000008c pop edi
0000008d pop ebp
0000008e ret
C语言
Python

1万+

被折叠的 条评论
为什么被折叠?



