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

 WASM Phorum —› WASM.ASSEMBLER —› Позиционно независимый jmp - возможен ли?

<< . 1 . 2 . 3 . >>

Посл.отвђт Сообщен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.

<< . 1 . 2 . 3 . >>


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