Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [WinDDK] sidt в отдельную функцию для AMD64 
:(
    Опции темы
anatox91
Дата 3.11.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



Цитата

Как известно, начиная с Windows Server 2003 DDK поддерживается сборка драйверов под 64-битные платформы. Также известно, что инструкция __asm более не доступна для использования в 64-битном коде. Чтобы использовать ассемблер при сборке теперь необходимо в обязательном порядке создавать .asm-файл и писать ассемблерный код там.

покажите пожалуйста пример как можно вынести в отдельную функцию на ассемблере инструкцию
Код

sidt idt_info

если idt_info у меня переменная внутри функции DriverEntry() на Си, как сделать так, чтобы функция на ассемблере, вынесенная в отдельный файл записала мне значение в эту переменную?
нашел примерный формат написания функции 
Код

public store_idt
_TEXT SEGMENT
store_idt proc
    sidt idt_info
store_idt endp
_TEXT ENDS
END

но естественно компилятор говорит что не знает переменную idt_info

Это сообщение отредактировал(а) anatox91 - 3.11.2010, 15:09


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
icecrashldr
Дата 3.11.2010, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 5.7.2010

Репутация: нет
Всего: нет



PM MAIL WWW   Вверх
anatox91
Дата 3.11.2010, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



icecrashldr, я там про это и читал, то что я цитировал - как раз оттуда) но мне просто нужен маленький примерчик как эту функцию записать) или книжку(статью) где объясняется программирования на ассемблере под windows для amd64

Это сообщение отредактировал(а) anatox91 - 3.11.2010, 18:24


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Sartorius
Дата 3.11.2010, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 1
Всего: 37



PM MAIL ICQ   Вверх
anatox91
Дата 5.11.2010, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



а можно маленький пример для sidt?


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
anatox91
Дата 10.11.2010, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



вот откопал некое подобие того, что искал, но при запуске драйвера вылетает BSOD 0x0000007e
вот такой ассемблерный код:
Код

public get_idt_base_address
_TEXT SEGMENT
get_idt_base_address proc
    sub esp, 8
    sidt qword ptr[esp]
    mov eax, dword ptr[esp+2]
    add esp, 8
    ret
get_idt_base_address endp
_TEXT ENDS
END

вот так объявляется в самом драйвере:
Код

extern void* get_idt_base_address();


и вызывается таким образом:
Код

IDTINFO idt_info = *(IDTINFO*)get_idt_base_address();

где IDTINFO - вот такая структура
Код

typedef struct {
    unsigned short IDTLimit;
    unsigned short LowIDTbase;
    unsigned short HiIDTbase;
} IDTINFO;


может кто-нибудь подсказать в чем проблема?



Это сообщение отредактировал(а) anatox91 - 10.11.2010, 23:25


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
Dem_max
Дата 11.11.2010, 05:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



Цитата

вот так объявляется в самом драйвере:
extern void* get_idt_base_address();


Цитата

и вызывается таким образом:
IDTINFO idt_info = *(IDTINFO*)get_idt_base_address();

может кто-нибудь подсказать в чем проблема?


различий не видите в приведенных описаниях функций ?


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
anatox91
Дата 11.11.2010, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



ну так я ведь привожу к нужному типу


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
anatox91
Дата 11.11.2010, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



как по-твоему нужно?


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0856 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.