Форум программистов, компьютерный форум, киберфорум
FASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
87 / 86 / 27
Регистрация: 04.10.2012
Сообщений: 355

Хочу именованный virtual

12.10.2015, 19:31. Показов 1421. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую!
WinAPI InitSecurityInterface() возвращает указатель на структуру, где почти каждое поле - указатель на функцию. Теперь мне надо вызвать одну из этих функций. Например, EncryptMessage(). Я пишу:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
virtual at rax
  security_interface.dwVersion                  dq
  security_interface.EnumerateSecurityPackages  dq
  security_interface.QueryCredentialsAttributes dq
  security_interface.AcquireCredentialsHandle   dq
  security_interface.FreeCredentialsHandle      dq
  security_interface.Reserved2                  dq
  security_interface.InitializeSecurityContext  dq
  security_interface.AcceptSecurityContext      dq
  security_interface.CompleteAuthToken          dq
  security_interface.DeleteSecurityContext      dq
  security_interface.ApplyControlToken          dq
  security_interface.QueryContextAttributes     dq
  security_interface.ImpersonateSecurityContext dq
  security_interface.RevertSecurityContext      dq
  security_interface.MakeSignature              dq
  security_interface.VerifySignature            dq
  security_interface.FreeContextBuffer          dq
  security_interface.QuerySecurityPackageInfo   dq
  security_interface.Reserved3                  dq
  security_interface.Reserved4                  dq
  security_interface.ExportSecurityContext      dq
  security_interface.ImportSecurityContext      dq
  security_interface.AddCredentials             dq
  security_interface.Reserved8                  dq
  security_interface.QuerySecurityContextToken  dq
  security_interface.EncryptMessage             dq
  security_interface.DecryptMessage             dq
  security_interface.SetContextAttributes       dq
  security_interface.SetCredentialsAttributes   dq
  security_interface.ChangeAccountPassword      dq
end virtual
call [security_interface.EncryptMessage]
Работает. Когда-нибудь мне понадобится вызвать еще какую-то функцию из структуры. Поэтому до вызова EncryptMessage сохраняю указатель на структуру в памяти:
Assembler
1
2
security_interface dq ?
mov [security_interface], rax
Теперь, чтобы вызвать другую функцию, я должен писать virtual at security_interface и все поля заново? А если потом снова понадобится какое-то поле, но так случится, что указатель на структуру уже будет в регистре RDX, то для оптимизации кода придется писать virtual at rdx и все поля уже в третий раз?
В MASM достаточно было бы написать call (SECURITY_FUNCTION_TABLE ptr [какой_хошь_адрес]).EncriptMessage, единожды описав структуру SECURITY_FUNCTION_TABLE. Очевидно, что должен быть красивый способ решения задачи и в FASM, но я его не знаю.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.10.2015, 19:31
Ответы с готовыми решениями:

Почему ДВССЫЛ на простой именованный диапазон работает, а на динамический именованный не работает?
Т.е. если создать список, который будет получать данные из именованного диапазона с фиксированным размером диапазона, то ДВССЫЛ вернёт...

Именованный не именованный каналы
Есть програмулина, как её через каналы пустить?? клиенская часть #include <stdio.h> #include <fcntl.h> ...

Protected abstract virtual base pure virtual private destructor
Хай, all) Вопрос не для начинающих и дурацкий) В разделе для экспертов публиковать не стал, чтобы не засорять его) Наткнулся тут на...

9
Эксперт быдлокодинга
 Аватар для Полный 30h
2094 / 528 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
14.10.2015, 15:52
Разве нельзя создать структуру и указать её при вызове InitSecurityInterface, а после пользовать её когда понадобится?
0
87 / 86 / 27
Регистрация: 04.10.2012
Сообщений: 355
15.10.2015, 18:18  [ТС]
InitSecurityInterface возвращает лишь указатель на структуру.
0
435 / 246 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
15.10.2015, 21:00
mytilus, перемести ее себе в дату.
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2094 / 528 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
15.10.2015, 21:45
Мотороллер, если верить https://msdn.microsoft.com у этой функции нет параметров. Т.е. как я понимаю повлиять на адрес структуры в принципе нельзя. Но тогда мне становится непонятным вот это
Цитата Сообщение от mytilus Посмотреть сообщение
В MASM достаточно было бы написать call (SECURITY_FUNCTION_TABLE ptr [какой_хошь_адрес]).EncriptMessage, единожды описав структуру SECURITY_FUNCTION_TABLE.
0
87 / 86 / 27
Регистрация: 04.10.2012
Сообщений: 355
15.10.2015, 21:55  [ТС]
Ну, смотрите. Получил я, значит, этот указатель. Он сейчас в регистре RAX. Я сохраняю его в data на будущее. И в этом будущем я буду читать указатель из data. Но сейчас он в RAX, и для скорости я обращаюсь к полю структуры не data+offset, а RAX+offset. То есть мне нужно два virtual - at rax сейчас и at data в будущем. Или я что-то не догоняю (просто на FASM перешел буквально на днях)?
0
Эксперт быдлокодинга
 Аватар для Полный 30h
2094 / 528 / 70
Регистрация: 04.11.2010
Сообщений: 1,314
15.10.2015, 22:00
mytilus, ну я вообще сварщик программист не настоящий (см. ник) если всё в скорость упирается, то почему нельзя просто взять какой нибудбь r15 и юзать его вместо rax. Функции его вроде как не трогают, во всяком случае те с какими я работаю.
0
87 / 86 / 27
Регистрация: 04.10.2012
Сообщений: 355
16.10.2015, 01:11  [ТС]
В регистре хранить не получится, хотя очень хотелось бы. Мне к этой структуре нужен доступ из других потоков.
0
435 / 246 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
16.10.2015, 08:53
mytilus, дак я же пишу - переместите себе структуру в дату.
Assembler
1
2
3
4
5
6
invoke [Ваша_функция]
;на выходе в rax какая-то херь
mov rsi, rax
mov rdi, такая_же_структура_как_в_rax_только_в_сегменте_данных
mov rcx, размер_структуры
rep movsb
Добавлено через 34 секунды
а потом вызывать функции из нее как
Assembler
1
call [такая_же_структура_как_в_rax_только_в_сегменте_данных.нужная_функция]
0
87 / 86 / 27
Регистрация: 04.10.2012
Сообщений: 355
16.10.2015, 18:57  [ТС]
Мотороллер, я Вашу идею понял. Но есть один маленький нюанс. Если я пишу на asm, то беру на себя обязательства по наиполнейшей оптимизации кода. Все-таки конечный результат должен выглядеть так:
Assembler
1
2
3
4
5
6
call [InitSecurityInterface]
mov  [адрес], rax
; первый вызов функции из структуры:
call qword ptr [rax+смещение]
; второй вызов:
call [адрес+смещение]
Добавлено через 15 минут
Хотя... Сейчас посмотрел на свой код и понял, что
Assembler
1
call qword ptr [адрес+смещение]
с точки зрения оптимизации лучше, чем
Assembler
1
call qword ptr [rax+смещение]
Так что, наверное, мой вопрос решился.

Добавлено через 4 часа 34 минуты
Нет! Я уже сам запутался в том, что мне нужно. А нужно, чтобы было так:
Assembler
1
2
3
4
5
6
7
call [InitSecurityInterface]
mov  [myVar], rax
; первый вызов функции из структуры:
call qword ptr [rax+смещение]
; второй вызов:
mov rax, [myVar]
call qword ptr [rax+смещение]
В общем, опишу virtual at rax, и будет мне счастье.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.10.2015, 18:57
Помогаю со студенческими работами здесь

Именованный диапазон
Как кодом увеличить именованный диапазон на одну строку ?

Записать в именованный канал
Выполняю следующую команду в консоли: mkfifo mypipe Затем вторую команду: echo 'first' > mypipe ВОТ ТУТ ТО И ПРОИСХОДИТ...

Именованный конструктор + inline
Приветствую, Форумчане! Следующий код, оформленный в одном файле работает на ура. class Point2 { public: static Point2...

Именованный каналы (FIFO)
Здравствуйте, хотел бы спросить у знатоков, нет ли готовой библиотеки для работы с именованными пайпами (named pipe or FIFO). Честно говоря...

Чат через именованный Pipe
Привет всем. Написал чат который запускается из двух файлов на одном компьютере. Все делал через CreateNamedРipe. Можно ли реализовать...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru