· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Intel manula vs OllyDbg(opcode 0x6C,0x6E)

Посл.отвђт Сообщенiе


Дата: Авг 24, 2004 08:23:40

В мануале от интела для п4
(Instruction Set Reference N-Z order number 253667)
0x6C ins byte [edi],dx (Yb,DX)
0x6D ins word/dword [edi],dx (Yv,DX)
0x6E outs dx,byte [esi] (DX,Xb)
0x6F outs dx,word/dword [esi] (DX,Xv)

У оли (1.08 и 1.10)
6C INS BYTE PTR ES:[EDI],DX ; I/O command
6D INS DWORD PTR ES:[EDI],DX ; I/O command
6E OUTS DX,BYTE PTR ES:[EDI] ; I/O command
6F OUTS DX,DWORD PTR ES:[EDI] ; I/O command

Скорее всего прав интел, значит это баг оли?


Дата: Авг 24, 2004 11:31:35

:)
А вот что у меня Olly кажет:
6C            ins     [byte es:edi], dx                ;  I/O command
6D            ins     [dword es:edi], dx               ;  I/O command
6E            outs    dx, [byte es:edi]                ;  I/O command
6F            outs    dx, [dword es:edi]               ;  I/O command

Дело в том, что у x86 нет и никогда не было стандартного ситаксиса.


Дата: Авг 24, 2004 13:44:29

дело не в синтаксисе, а в неверном операнде у оли. edi вместо правильного esi для команд outs.


Дата: Авг 24, 2004 15:23:33

infern0
Вот именно, там должен быть esi

Отправил письмецо на Ollydbg@t-online.de


Дата: Авг 26, 2004 11:57:44

А для проверки опкода пойдет Debug или Soft-Ice.
И в Hiew если ввести 6E и 6F то тaм всего лиш outsb outsw. Это правильно ? Эти команды похожи на MOVS и SCAS для упрощения можно вводить соотв. MOVSB и MOVSW. Насколько я помню возможна отмена только одного заданного (ES) регистра.


Дата: Авг 26, 2004 12:30:25 · Поправил: leo

В мануале конечно опечатки есть:
в таблице написано E(SI), далее в тексте "read from either the DS:EDI or the DS:DI registers", а еще дальше опять "The location is always specified by the DS:(E)SI registers". Вот только вопрос, что из всего этого верно. Судя по количеству повторов, видимо, ESI.


Дата: Авг 27, 2004 02:19:50

Еще один недочет в OllyDasmEngine
movsx/movsz/bswap неправильно декодируются с перефиксом размера 0x66

;у олли
movsx reg16, mem16
movzx reg16, mem16
bswap reg16

;правильный вариант
movsx reg32, mem16
movzx reg32, mem16
bswap reg32


Дата: Авг 27, 2004 02:20:41

zzzyab
>А для проверки опкода пойдет Debug или Soft-Ice.

Debug нет, SoftIce я неиспользую поэтому невкурсе,
fasm очень хорош для этого дела я использую его

>И в Hiew если ввести 6E и 6F то тaм всего лиш outsb outsw. Это правильно ?

Да, это короткая форма записи

>Насколько я помню возможна отмена только одного заданного (ES) регистра.

Нет, переопределить сегмент можно только для источника, приемник всегда использует сегмент ES


Дата: Авг 27, 2004 04:32:28 · Поправил: S_T_A_S_

Smile

О каких опкодах идёт речь в случае с movsx/movzx/bswap?

Просто проверил
66:0FBF05 50004000     movsx   ax, [word ds:400050]

загружает в ax,7369h (из заголовка PE)
Старшая половина eax не меняется.

Команда
66:0FC8        bswap   ax
просто обнуляет ax.
Согласно мануалу команды bswap reg16 нет.

Это всё на AMD Athlon.

Или я (опять, как и в первый раз =) что-то напутал?


Ещё, на всякий случай, по поводу FASM - он кодирует некоторые инструкции не так как это принято у микрософтовских и интеловских компиляторов:
33DB        xor ebx,ebx     ; микрософт 
31DB        xor ebx,ebx      ; FASM 


Дата: Авг 27, 2004 07:23:28

S_T_A_S_
Я тоже, естественно, проверял эти инструкции

>Или я (опять, как и в первый раз =) что-то напутал?
Э... м... ну, вообщем-то, если инструкция работает (неправильно), то это еще не значит что она правильно декодированна :)

>Согласно мануалу команды bswap reg16 нет.
Я о томже.
Также, согласно ману, нет инструкции movsz/movzx reg16, mem16

>просто обнуляет ax
В мане пишут, что с перефиксом размера перед bswap, результат становится неизвестен, на практике младшие 16бит сбрасываются.

Мне кажется инструкция от этого не становится bswap reg16 а остается bswap reg32 или mov reg32,mem16 но со другим эффектом и именно так она декодируется в моем дизассемблере.

>Ещё, на всякий случай, по поводу FASM - он кодирует некоторые инструкции не так как это принято у микрософтовских и интеловских компиляторов:
33DB xor ebx,ebx ; микрософт
31DB xor ebx,ebx ; FASM

Млин, ну этоже фасм, а не какойнить там микрософ :)

Есть такое дело, в регистровых операциях он предпочитает мненять местами поля reg/opc и reg/mem, вместо того чтобы установить бит D.


Дата: Авг 27, 2004 10:06:07

Дык, то что инструкции нет в мануале - это совершенно не значит, что её нет на самом деле!
Опкод декодируется и выполняется процем без проблем, исключений не возникает, значит инструкция ЕСТЬ, но не документирована.

Причём результат инчтрукции можно обосновать логически:
0FC8        BSWAP EAX:

TEMP ←DEST
DEST[7..0] ←TEMP(31..24]
DEST[15..8] ←TEMP(23..16]
DEST[23..16] ←TEMP(15..8]
DEST[31..24] ←TEMP(7..0]


66:0FC8     BSWAP AX:

TEMP ←DEST & 0FFFFh       ; AX !
ALU_REG[7..0] ←TEMP(31..24]  ; 0!
ALU_REG[15..8] ←TEMP(23..16] ; 0!
ALU_REG[23..16] ←TEMP(15..8] ; AH
ALU_REG[31..24] ←TEMP(7..0]  ; AL
DEST ←ALU_REG & 0FFFFh
Тут нет "простого" обнуления, всё как и положено работает, но в результате таких операций получается 0.


И ещё.
Диззассемблер от самой AMD прекрасно этот bswap ax понимает. Интеловского у меня нет.

_153363657__bswap.PNG


Дата: Авг 28, 2004 01:45:21

>Дык, то что инструкции нет в мануале - это совершенно не значит, что её нет на самом деле!
Аналогично

>Опкод декодируется и выполняется процем без проблем, исключений не возникает, значит инструкция ЕСТЬ, но не документирована.
Ну, я бы сказал последствия использования опкода с модификатором размера недокументированны, а опкод и инструкция известны.

Рылся в сети, у интела по поводу bswap ничего не нашел, у амд тоже.

ms vc++ 6.0 - дизассемблирует bswap и movsx/zx c параметром reg32
но ассемблировать может как reg16, Тасм тоже не ругается.

hiew611 - инструкцию bswap c перефиксом размера не распознает, но movsx/sz видит с параметром reg16

Так-что перефикс размера допустим и используется, заявление о недочете деодирования movsz/sx bswap в OllyDasmEngine снимается :)
Может сделаю так и в своем дизассемблере, всетаки эффект инструкции другой и используемые операнды тоже другие

Всем спасиба,истина установлена... или уже совсем рядом :)


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.069