Необходимо разобраться в программе - Assembler
Формулировка задачи:
Здравствуйте, есть большая программа, написана на С со вставками на ассемблере. Ассемблер не знаю почти никак, поэтому проблемно понять,что делает код. Структурно явное обращение (GetProcAddress) к DLL.
В основном коде присутствует
Я так понял там хранятся(в стеке) локальные переменные, которые как то передаются в DLL, без этого кода никакого обмена не происходит
asm mov p,esp SaveParFunc.pStack_max=p-1; "Вызов нескольких функций " asm mov p,ebp SaveParFunc.pStack_min=p-1; SaveParFunc.index=SaveParFunc.pStack_max-SaveParFunc.pStack_min; i=(SaveParFunc.index+1)*4; memcpy(&SaveParFunc.save_data[0],SaveParFunc.pStack_min,i); p=SaveParFunc.pStack_max; p-=1;} else p=(int*)SaveParFunc.save_data[0]; asm mov ebp,p asm mov esp,eb asm pop ebp asm ret " и еще через несколько функций" for(i=SaveParFunc.index;i>=0;i--) { j=SaveParFunc.save_data[i]; asm push j } i=SaveParFunc.save_data[0]; asm mov ebp,i; asm mov esp,ebp; asm pop ebp asm ret
Решение задачи: «Необходимо разобраться в программе»
textual
Листинг программы
mov esp,ebp; pop ebp ret
Объяснение кода листинга программы
Список действий в данном коде:
mov esp,ebp
- перемещает адрес стека в EBP в регистр ESP.pop ebp
- извлекает значение из регистра EBP в EBP.ret
- возвращает управление в вызывающую программу.