Неоднозначная расшифровка команд

Всем привет!

не могу понять, в чём причина различного поведения IDA Pro

Есть 64-битная DLL-ка. Открываю её в IDA (v1.5.0, интерфейс в стиле Borland C). Я знаю, что по некоторому адресу начинается некоторая функция. Там IDA показывает просто массив байт. Я прошу его представить эти байты как команды ассемблера и у меня получилось два разных результата!

Покажу кусочек из обоих результатов, который характеризует проблему:

1й вариант (который мне нравится):

AssemblerВыделить код

1
2
3
4

0x518: mov rbx, rsi
0x51B: jle short loc_52D
0x51D: mov rdx, rcx
0x520: lea rcx ...

2й вариант, который мне не нравится:

AssemblerВыделить код

1
2
3
4
5
6
7

0x518: dec eax
0x519: mov ebx, esi
0x51B: jle short loc_52D
0x51D: dec eax
0x51E: mov edx, ecx
0x520: dec eax
0x521: lea rcx ...

Как видно, он где не попадя вставляет странную инструкцию

dec eax

которая в том коде ни к селу ни к городу. И изменяет сами команды: вместо 64 битных регистров использует те же самые, но 32 битные. Например:

mov rbx, rsi

заменил на

mov ebx, esi

На самом деле код функции, фрагменты которого я привёл, я уже разобрал (в 1м варианте - совершенно нормальный и логичный код). Просто как-то захотел вернутся к этой функции и кое что проверить, попросил IDA вновь представить байты в виде команд, и он уже выдал другой результат, хотя я точно знаю где начало функции и где я начинаю расшифровывать команд. Дизассемблируемый файл так же никогда не изменялся.

Кто знает, в чём причина? Как мне вновь увидеть первый вариант функции?

Добавлено через 6 минут

P.S. В обоих случаях, если представить команды в виде набора байт, то будет одна и та же последовательность:

AssemblerВыделить код

1
2
3
4
5
6
7
8
9

0x518  48h
0x519  8Bh
0x51A  0DEh
0x51B  7Eh
0x51C  10H
0x51D  48h
0x51E  8Bh
0x51F  0D1h
0x520  48h