Необходимо разобраться в программе - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, есть большая программа, написана на С со вставками на ассемблере. Ассемблер не знаю почти никак, поэтому проблемно понять,что делает код. Структурно явное обращение (GetProcAddress) к 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
Я так понял там хранятся(в стеке) локальные переменные, которые как то передаются в DLL, без этого кода никакого обмена не происходит

Решение задачи: «Необходимо разобраться в программе»

textual
Листинг программы
mov esp,ebp;
pop ebp
ret

Объяснение кода листинга программы

Список действий в данном коде:

  1. mov esp,ebp - перемещает адрес стека в EBP в регистр ESP.
  2. pop ebp - извлекает значение из регистра EBP в EBP.
  3. ret - возвращает управление в вызывающую программу.

Оцени полезность:

13   голосов , оценка 4.308 из 5