|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 11, 2004 03:44:34 Black_mirror Не хотелось трогать стек, но я честно говоря вариант push/ret выпустил из виду, подумаю, может сделаю и так. |
|
|
Дата: Июл 11, 2004 04:07:27 Мастдай - рулез форева! В 2k какое-то недоразумение появляется а не MsgBox(приаттачил) :-) Что-то меня эти глюки смущают, что за проблемы с этими абсолютными jmp'ами? :-( 1265844419__MsgBox_2k.png |
|
|
Дата: Июл 11, 2004 04:37:00 · Поправил: Asterix The Svin С таким макросом всё работает: CodMdAB macro offsPart
LOCAL segpart
mov WORD PTR segpart, cs
db 0EAh
dd offsPart
segpart:
dw 0
endm |
|
|
Дата: Июл 11, 2004 05:17:26 Да забавно. Т.е. просто делаем mov по этому адресу - всё в порядке, делаем pop - ерунда. Но забавно то, что переход происходит в любом случае по правильному месту, но почему то при заполнении стековой операцией (в дебареге видим абсолютно одинаковый результат в памяти в обоих случаях) работа с системными функциями нарушается. |
|
|
Дата: Июл 11, 2004 05:41:28 A не работает оно у вас потому, что push cs заталкивает в стек 4 байта, а pop word ptr [seg] вытаскивает только 2. Вот MessageBox'у и не нравится, что стек не выровнен. Вобщем перед push cs нужен префикс переопределения размера операнда. |
|
|
Дата: Июл 11, 2004 10:36:56 · Поправил: The Svin Хе. Забавно, детская ошибка. Записывает он (push CS) в стек всё таки слово а не двойное слово. Но уменьшает указатель стека на 4е а не на 2а и пишет слово соответсвенно по адресу "старый ESP"-4 а не "старый ESP"-2. |
|
|
Дата: Июл 11, 2004 11:08:40 The Svin Записывает он cs расширеный нулями до двойного слова. |
|
|
Дата: Июл 11, 2004 13:14:36 · Поправил: The Svin Ни фига. Записывает он только слово. |
|
|
Дата: Июл 11, 2004 13:58:43 Кстати посмотрел доку Intel по push - никаких исключений по push segreg без префикса 66h в 32х битной адресации. Можно писать очередную ошибку в Errata по докам Intel. в BCD инструкциях у тебя однажды ошибка была, тоже не по твоей вине. У Intel неправильно алгоритм описан в доках. |
|
|
Дата: Июл 11, 2004 20:12:43 · Поправил: Black_mirror The Svin Ни фига. Записывает он только слово. Может intel и слово записывает, а вот AMD предпочитает записывать двойное слово: mov dword [esp-4],0ffffffffh push cs int3 запускаем под отладчиком и видим на вершине стека 0000001bh, а не 0ffff001bh. Кстати посмотрел доку Intel по push - никаких исключений по push segreg без префикса 66h в 32х битной адресации. Так их и не должно быть, без префикса записывается cs расширенный до двойного слова, а с префиксом только слово. |
|
|
Дата: Июл 12, 2004 04:53:09 Что значит "не должно быть"? Почему это AMD, клон IA32, является нормативом "как должно быть"? Он должен работать как в документации у Intel написано, иначе он несовместим будет. А вот "как в документации написано про push" ни Пни ни AMD не работают. При этом у них есть "общее отличие" - в 32х битной адресации в обоих моделях push segreg уменьшает указатель стека на 4 а не на два. Далее Пень просто записывает содержание segreg, а AMD по твоим словам ещё и нули в старшее слово пишет или не только нули? Расширение то знаковое или беззнаковое? |
|
|
Дата: Июл 12, 2004 15:55:15 > Почему это AMD, клон IA32, является нормативом "как должно быть"? Времена меняются, например 64 битный проц интел теперь лепит по спецификациям AMD ;-) |
|
|
Дата: Июл 12, 2004 16:55:57 · Поправил: Black_mirror The Svin 00401000 > C74424 FC FFFF>MOV DWORD PTR SS:[ESP-4],-1 00401008 0E PUSH CS 00401009 CC INT3 Что мы видим на вершине стека запустив такую прогу в 32x битном режиме под отладчиком? Мне кажется что 0000xxxx, а не FFFFxxxx. На AMD это так, думаю и на интел тоже. |
|
|
Дата: Июл 12, 2004 17:11:49 Black_mirror на моем П4 на стеке лежит FFFF001B |
|
|
Дата: Июл 13, 2004 02:05:29 Black_mirror Что-то немножко тормозим. Я уже дважды сказал как будет на Пнях. Ты уже дважды посылаешь код чтобы проверить. Black_mirror - я пишу не "от фанаря", и разумеется могу придумать как проверить. Это третий раз попытка сказать - нет в Intel процессорах это не так. И им AMD не указ. Можешь к этому относится как одной из "несовместимостей" AMD и Intel. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.100 |