Перевести assembler в c++

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

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

есть вот такой код psbfile.dll+4120 - 8B 54 24 04 - mov edx,[esp+04] psbfile.dll+4124 - 56 - push esi psbfile.dll+4125 - 8B F1 - mov esi,ecx psbfile.dll+4127 - 8B C2 - mov eax,edx psbfile.dll+4129 - 57 - push edi psbfile.dll+412A - C7 46 18 0F000000 - mov [esi+18],0000000F psbfile.dll+4131 - C7 46 14 00000000 - mov [esi+14],00000000 psbfile.dll+4138 - C6 46 04 00 - mov byte ptr [esi+04],00 psbfile.dll+413C - 8D 78 01 - lea edi,[eax+01] psbfile.dll+413F - 90 - nop psbfile.dll+4140 - 8A 08 - mov cl,[eax] psbfile.dll+4142 - 83 C0 01 - add eax,01 psbfile.dll+4145 - 84 C9 - test cl,cl psbfile.dll+4147 - 75 F7 - jne psbfile.dll+4140 psbfile.dll+4149 - 2B C7 - sub eax,edi psbfile.dll+414B - 50 - push eax psbfile.dll+414C - 52 - push edx psbfile.dll+414D - 8B CE - mov ecx,esi psbfile.dll+414F - E8 2C060000 - call psbfile.dll+4780 psbfile.dll+4154 - 5F - pop edi psbfile.dll+4155 - 8B C6 - mov eax,esi psbfile.dll+4157 - 5E - pop esi psbfile.dll+4158 - C2 0400 - ret 0004 Всё что я ВРОДЕ правильно перевёл это:
char *source;
int counter, counter2;
char cl;
 
int procedure02()
{
    
}
 
int procedure01()
{
    counter2 = counter+1; // lea edi,[eax+01]
    
    do
    {
        cl = source[counter]; // mov cl,[eax]
        counter++; // add eax,01
    } while(cl != ""); // test cl,cl
    
    counter -= counter2; // sub eax,edi
    
    counter2 = procedure02(counter, ???); // call psbfile.dll+4780

    return 4;
}

Решение задачи: «Перевести assembler в c++»

textual
Листинг программы
int DisplaysByLetters(int old_pos) // mov edx, [esp+04]
{
    sub = old_pos + 1; // lea edi,[eax+01]
    
    do
    {
        cl = source[pos]; // mov cl,[eax]
        pos++; // add eax,01
    } while(cl != 0); // test cl,cl
    
    pos -= sub; // sub eax,edi
    
    procedure02(pos, NULL); // call psbfile.dll+4780
 
    return NULL;
}

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

В этом коде выполняется функция с именем DisplaysByLetters, которая принимает целочисленный аргумент old_pos. Это значение увеличивается на единицу и сохраняется в переменной sub. Затем код входит в цикл do-while, который продолжается до тех пор, пока значение переменной cl не станет равным нулю. Значение cl вначале присваивается значению источника данных по текущей позиции pos. Затем pos увеличивается на единицу. Значение pos уменьшается на sub после выхода из цикла. Затем вызывается функция procedure02 с аргументами pos и NULL. Наконец, функция возвращает NULL.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

15   голосов , оценка 4.2 из 5