Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: MASM64, х64/long mode
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
dummok
2 / 2 / 0
Регистрация: 07.07.2017
Сообщений: 14
1

Микс x86 и x64 вычисление указателей

07.01.2018, 07:17. Просмотров 529. Ответов 5
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DWORD64 *memoryBuffer = new DWORD64;
 
int main(void)
{
    
    __asm
    {   
        int 3
 
               EMIT(0x6A) EMIT(0x33)                         /*  push   _cs             */ \
               EMIT(0xE8) EMIT(0) EMIT(0) EMIT(0) EMIT(0)   /*  call   $+5             */ \
               EMIT(0x83) EMIT(4) EMIT(0x24) EMIT(5)        /*  add    dword [esp], 5  */ \
               EMIT(0xCB)  /* retf    swtich to x64 */
 
               push   memoryBuffer         
         }
}
изучаю работу под wow64
объясните пожалуйста почему меняется значение memoryBuffer при переключении x86-x64,
если это как то связано с трансляцией адресов и регистром cs почему в windbgx64 в окне disassembly значения остаются прежними?
почему не получается сделать так mov [esp], memoryBuffer вроде синтаксис masm позволяет?
я использую visual studio для создания 32 битного приложения, как заставить понять её что я перешел в х64?

Добавлено через 20 часов 37 минут
кажется разобрался что происходит,
в режиме х86 опкод ff 35 3c b6 32 01 обрабатывается как push DWORD PTR ds:0x132b63c
в режиме х64 опкод ff 35 3c b6 32 01 обрабатывается как push QWORD PTR [rip+0x132b63c] # 0x132b642
windbg же выдает это вот в таком виде ff353cb63201 push qword ptr [00000000`0264e5fd] ds:00000000`0264e5fd
2
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2018, 07:17
Ответы с готовыми решениями:

Я переустановил винду и вместо x64 поставил x86! А теперь не могу поставить x64 обратно(((
Я переустановил винду и вместо x64 поставил x86! А теперь не могу поставить x64 обратно((( Пишет...

User32.dll на Win x64 - это x86-библиотека, x64 или. и то и другое одновременно?
В проектах .NET функции из нее нормально импортируются при любой разрядности проекта - как x86, так...

X86 или x64 под Windows 10/x64
Только начинаю разбираться с написанием драйверов и как обычно уже миллион вопросов. Установлена...

Как установить Windows 10 x64 (после обновления с Win 7 x86 до Win 10 x86) сохранив лицензию
Вопрос такой. У меня стояла седьмая 32-ух битная винда. Но процессор 64 разрядный. Так вот, я...

x86 vs x64
Здравствуйте! Сейчас на боевом сервере у меня стоит x86-версия PostgreSQL 9.1. Из-за сильно...

5
Jin X
6711 / 1499 / 174
Регистрация: 14.12.2014
Сообщений: 2,903
Записей в блоге: 11
Завершенные тесты: 3
07.01.2018, 23:15 2
Цитата Сообщение от dummok Посмотреть сообщение
почему не получается сделать так mov [esp], memoryBuffer вроде синтаксис masm позволяет?
Не позволяет, т.к. memoryBuffer - это память, получается, что нужно записать память в память. Что-то вроде mov [esp],[ebp+4]. Если только memoryBuffer не оптимизирован до регистра.

Цитата Сообщение от dummok Посмотреть сообщение
я использую visual studio для создания 32 битного приложения, как заставить понять её что я перешел в х64?
Сомневаюсь, что это можно. Это же всё читерство (переключение режимов), а не документированная штука. Могу ошибаться, но сдаётся мне, что так и есть.
1
murderer
4612 / 1581 / 163
Регистрация: 06.10.2010
Сообщений: 3,501
13.01.2018, 11:17 3
я использую visual studio для создания 32 битного приложения, как заставить понять её что я перешел в х64?
Ты про это?
Микс x86 и x64 вычисление указателей
0
Jin X
6711 / 1499 / 174
Регистрация: 14.12.2014
Сообщений: 2,903
Записей в блоге: 11
Завершенные тесты: 3
13.01.2018, 12:44 4
murderer, как я понял, он про то, что часть кода написана под x86, а часть – под x64, причём в одном и том же исходнике. Нужно заставить VS нормально это обработать. Как если бы в fasm было написано:
Assembler
1
2
3
4
5
6
7
use32
mov eax,[ebx]
 
use64
mov rax,[rbx]
 
use32
1
dummok
2 / 2 / 0
Регистрация: 07.07.2017
Сообщений: 14
13.01.2018, 18:12  [ТС] 5
Jin X, да хотелось именно так))) узнал еще что студия не поддерживает инлайн асм х64,
в принципе можно передать управление на массив с готовым байткодом.
буду рад любым советам, может есть какой то другой компилятор который умеет это или интересные хаки
0
Jin X
6711 / 1499 / 174
Регистрация: 14.12.2014
Сообщений: 2,903
Записей в блоге: 11
Завершенные тесты: 3
13.01.2018, 21:37 6
Если код маленький, можно байтами, а если большой, можно сделать OBJ-файл (на FASM, например) и подключить его, написав в нём отдельную процедуру.
0
13.01.2018, 21:37
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2018, 21:37

C++ x86 и x64
Есть ли в программировании в C++ x86 и x64?

x86 или x64
Отличатся ли версии ubuntu x86 и x64 производительностью, багами? Что быстрей и стабильней работает?

Downgrade W7 x64 -> x86
Как осуществить минимальными телодвижениями? Иначе BSOD...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru