Перевести 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д