MasterGH Опубликовано 8 марта, 2015 Поделиться Опубликовано 8 марта, 2015 В отладочном коде частенько вижу инструкцию leave ближе к концу функции. Полез в поиск и узнал, что используется совместно с инструкцией enter, но enter вообще не помню в отладке. Полез в поиск и вот, что узнал. Вместо enter аналог из других инструкций выполняется быстрее. Пример. Выполняется за 2 тактаpush ebpmov ebp,espsub esp,16leave Пример. Выполняется за 14 тактовenter 16,0leave Источник ------------Решил скомпилить я следующий код на C#using UnityEngine;using System.Collections;public class SEH : MonoBehaviour { int someCount, decCount; public void OnClickBtn(){ try{ someCount++; }catch{ decCount--; } }} Затем полез в CE и вот они знакомые инструкции 04599CD0 - 55 - push ebp04599CD1 - 8B EC - mov ebp,esp04599CD3 - 83 EC 18 - sub esp,1804599CD6 - 8B 45 08 - mov eax,[ebp+08]04599CD9 - 8B 48 10 - mov ecx,[eax+10]04599CDC - 41 - inc ecx someCount++;04599CDD - 89 48 10 - mov [eax+10],ecx04599CE0 - EB 31 - jmp 04599D1304599CE2 - 8B 45 E8 - mov eax,[ebp-18]04599CE5 - 8B 45 08 - mov eax,[ebp+08]04599CE8 - 89 45 EC - mov [ebp-14],eax04599CEB - 8B 45 EC - mov eax,[ebp-14]04599CEE - 8B C8 - mov ecx,eax04599CF0 - 8B 49 14 - mov ecx,[ecx+14]04599CF3 - 49 - dec ecx decCount--;04599CF4 - 89 48 14 - mov [eax+14],ecx04599CF7 - E8 C48BFDFF - call 045728C004599CFC - 89 45 FC - mov [ebp-04],eax04599CFF - 83 7D FC 00 - cmp dword ptr [ebp-04],0004599D03 - 74 0C - je 04599D1104599D05 - 8B 45 FC - mov eax,[ebp-04]04599D08 - 83 EC 0C - sub esp,0C04599D0B - 50 - push eax04599D0C - E8 6770C6FF - call 04200D7804599D11 - EB 00 - jmp 04599D1304599D13 - C9 - leave 04599D14 - C3 - ret Такие дела Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения