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