2014-11-29 2 views
-3

У меня есть кусок небольшого кода, и я не понимаю, что это значит. Может ли кто-нибудь помочь мне объяснить это?Можете ли вы помочь мне объяснить этот код asm?

mov  ecx, [esp+8] 
mov  edx, [ecx] 
inc  edx 
mov  [ecx], edx 
dec  edx 
mov  al, [esp+4] 
mov  [edx], al 
mov  eax, [esp+4] 
and  eax, 0FFh 
retn 
+0

Что вы не понимаете? –

+0

Зачем кому-то это делать? – simonzack

ответ

0

(Моя сборка немного ржавый, любой, пожалуйста, поправьте меня, если я ошибаюсь):

  1. esp является текущий стек указатель, который является, где местные жители и параметры, как правило, живут. esp+8 получит доступ к элементу, размер которого равен 8 байтам от текущего адреса стека. [x] обозначает разыменование, поэтому локальный тип указателя.
  2. Это значение копируется в регистр общего назначения ecx.
  3. Значение ecx затем интерпретируется как указатель и разыменовывается в edx, указывая, что это тип указателя на указатель.
  4. Значение edx увеличивается (возможно, указывая на следующий элемент в массиве с элементами размером 1 байт).
  5. Значение edx копируется обратно в адрес, на который указывает ecx.
  6. edx затем декрементируется.
  7. Значение стека со смещением 4 копируется в нижние 8 битов регистра a (это другой вид регистра и ax).
  8. Это значение затем копируется в любое место, на которое указывает edx.
  9. Повторное использование того же значения с шага 7 и ANDed с 0xFF - это фактически то же самое, что и копирование в al (так как оба обрабатывают только младшие 8 бит значения).
  10. Наконец retn получает адрес возврата из стека и возобновляет выполнение с этого адреса.

В C, я думаю, что это хорошее приближение:

... 
char* a = ... // local at offset +4 
char** b = ... // local at offset +8 
char* c = *b; 
c++; 
(*c)--; 
*c = a; // lower 8-bits implicit if `sizeof(char) == 1` and 1 byte is 8 bits (non-octet systems do exist) 
char* d = a & 0xFF; 
return; 

Я не совсем уверен, что здесь происходит, как это выглядит, как вы упускаете инструкции, которые пришли до того, что вы вывесили.

+0

Ты как руководство для ходьбы. Было бы интересно автоматизировать это на каком-то веб-сайте, таком как объяснители regex. – simonzack

+0

Большое вам спасибо. Извините, потому что у вас нет инструкций перед публикацией. Я больше не буду этого делать. –

+0

@simonzack Мне нравится эта идея! хотите работать вместе? : D – Dai

Смежные вопросы