C++ Вопрос Какой способ вызова winapi функций занимает меньше всего памяти?

Пользователь
Статус
Оффлайн
Регистрация
4 Мар 2021
Сообщения
95
Реакции[?]
35
Поинты[?]
0
давай сначала разберемся с тем что ты понимаешь о чем спрашиваешь . пример покажи ? что вызываешь в каком контексте. что то типа того смотрел ?
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
bibitka
Пользователь
Статус
Оффлайн
Регистрация
26 Июн 2020
Сообщения
133
Реакции[?]
66
Поинты[?]
0
Пользователь
Статус
Оффлайн
Регистрация
4 Мар 2021
Сообщения
95
Реакции[?]
35
Поинты[?]
0
и что ? программисту пофигу на язык. нормальному. язык лишь синтаксис для выполнения задачи. какая разница какой там язык стоит в статье если там есть механизм взаимодействия
если так важно вот тред с с++
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
bibitka
Пользователь
Статус
Оффлайн
Регистрация
26 Июн 2020
Сообщения
133
Реакции[?]
66
Поинты[?]
0
и что ? программисту пофигу на язык. нормальному. язык лишь синтаксис для выполнения задачи. какая разница какой там язык стоит в статье если там есть механизм взаимодействия
1659969710512.png
 
Всем Рептилойдам - Рен ТВ
Пользователь
Статус
Оффлайн
Регистрация
1 Фев 2020
Сообщения
541
Реакции[?]
92
Поинты[?]
0
давай сначала разберемся с тем что ты понимаешь о чем спрашиваешь . пример покажи ? что вызываешь в каком контексте. что то типа того смотрел ?
Пожалуйста, авторизуйтесь для просмотра ссылки.
Обычный вызов:
инключ стандартной либы (если нужно) и вызов например FreeLibrary(hLibModule);

Через прототип + GetProcAddress
GetProcAddress(GetModuleHandleA("Kernel32.dll"), " FreeLibrary");

Еще слышал про хеширование и вызов по хешу, но знаю про это мало.

Что мне надо?
Знать наиболее оптимальный вариант вызова подобных функций из расчёта занимаемой памяти.
Т.е обычный вызов занимает столько то байт, через прототип столько то и так далее
 
Пользователь
Статус
Оффлайн
Регистрация
4 Мар 2021
Сообщения
95
Реакции[?]
35
Поинты[?]
0
это еще почитай
Пожалуйста, авторизуйтесь для просмотра ссылки.

Обычный вызов:
инключ стандартной либы (если нужно) и вызов например FreeLibrary(hLibModule);

Через прототип + GetProcAddress
GetProcAddress(GetModuleHandleA("Kernel32.dll"), " FreeLibrary");

Еще слышал про хеширование и вызов по хешу, но знаю про это мало.

Что мне надо?
Знать наиболее оптимальный вариант вызова подобных функций из расчёта занимаемой памяти.
Т.е обычный вызов занимает столько то байт, через прототип столько то и так далее
это тонкая олтимизация. через какое то время сам проверю и отпишу . думаю, второй аккуратнее работает с памятью, но надо потестить. будет время гляну.
 
Последнее редактирование:
Всем Рептилойдам - Рен ТВ
Пользователь
Статус
Оффлайн
Регистрация
1 Фев 2020
Сообщения
541
Реакции[?]
92
Поинты[?]
0
это еще почитай
Пожалуйста, авторизуйтесь для просмотра ссылки.


это тонкая олтимизация. через какое то время сам проверю и отпишу . думаю, второй аккуратнее работает с памятью, но надо потестить. будет время гляну.
Второй вариант данный момент использую, 9 винапи функций, не использует никаких библиотек вроде <Windows.h>.
Прога из себя представляет инжектор и отправку http запроса с получением результата.
Но вот вес 4кб, минимум что смог сделать :(
 
bibitka
Пользователь
Статус
Оффлайн
Регистрация
26 Июн 2020
Сообщения
133
Реакции[?]
66
Поинты[?]
0
На твой вопрос невозможно ответить, потому что твой вопрос либо поставлен нерпавильно, либо ты сам не понимаешь что пишешь.
Про какую память ты пишешь? Про размер кода? Про размер Кучи или стека во время вызова?
Вызов винапишной функции это по сути разыменовывание указателя из таблицы импорта и вызов соответствующего кода по полученному адресу с передачей параметров в случае динамической линковки.
Либо в ручную загрузка необходимой либы и получение адреса нужной функции.(Конечно это на пару десятвов байт займет больше места в коде и стеке)
Что тут можно оптимизировать?
Если конечно беды с бошкой можно вызывать более низкоуревневые апи, наприер вместо Sleep вызывать SleepEx.
Если совсем все плохо с бошкой можем вызвать NtDelayExecution из Ntdll.
Если мы лежим в дурке можем сами сделать системное прерывание 80h с eax=34h.
 
Последнее редактирование:
Всем Рептилойдам - Рен ТВ
Пользователь
Статус
Оффлайн
Регистрация
1 Фев 2020
Сообщения
541
Реакции[?]
92
Поинты[?]
0
На твой вопрос невозможно ответить, потому что твой вопрос либо поставлен нерпавильно, либо ты сам не понимаешь что пишешь.
Про какую память ты пишешь? Про размер кода? Про размер Кучи или стека во время вызова?
Вызов винапишной функции это по сути разыменовывание указателя из таблицы импорта и вызов соответствующего кода по полученному адресу с передачей параметров в случае динамической линковки.
Либо в ручную загрузка необходимой либы и получение адреса нужной функции.(Конечно это на пару десятвов байт займет больше места в коде и стеке)
Что тут можно оптимизировать?
Если конечно беды с бошкой можно вызывать более низкоуревневые апи, наприер вместо Sleep вызывать SleepEx.
Если совсем все плохо с бошкой можем вызвать NtDelayExecution из Ntdll.
Если мы лежим в дурке можем сами сделать системное прерывание 80h с eax=34h.
Под весом и памятью я имел ввиду уменьшение занимаемого места на диске, ну типо вес проги такой-то, этот вес формируется исходя из кода, компилятора и тд.
Я же хочу оптимизировать код, а точнее вызовы winapi с целью уменьшение занимаемого веса.
Надеюсь ты правильно меня понял.

За пример спасибо, я в принципе думал насчёт спуска ближе к машинному коду, он явно занимает меньше места.
 
bibitka
Пользователь
Статус
Оффлайн
Регистрация
26 Июн 2020
Сообщения
133
Реакции[?]
66
Поинты[?]
0
За пример спасибо, я в принципе думал насчёт спуска ближе к машинному коду, он явно занимает меньше места.
Как раз нет, чем грубже ты спускаешьcя к прикладному уровню, тем больше у тебя действий. Можешь сам посмотреть через сколько библиотек редиректится вызов того же Sleep и сколько кода выполняется от вызова Sleep до системного прерывания. В то время когда мы можем выполнгить всего 2 инструкции:
1659972460860.png
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
4 Мар 2021
Сообщения
95
Реакции[?]
35
Поинты[?]
0
это еще почитай
Пожалуйста, авторизуйтесь для просмотра ссылки.


это тонкая олтимизация. через какое то время сам проверю и отпишу . думаю, второй аккуратнее работает с памятью, но надо потестить. будет время гляну.
используй loadlibrary брат мой и будет тебе счастье.
Под весом и памятью я имел ввиду уменьшение занимаемого места на диске, ну типо вес проги такой-то, этот вес формируется исходя из кода, компилятора и тд.
Я же хочу оптимизировать код, а точнее вызовы winapi с целью уменьшение занимаемого веса.
Надеюсь ты правильно меня понял.

За пример спасибо, я в принципе думал насчёт спуска ближе к машинному коду, он явно занимает меньше места.
а ну я понял. не такой фигней не страдал никогда . под мои задачи во главе угла всегда была стабильность а не размер ,)
 
Всем Рептилойдам - Рен ТВ
Пользователь
Статус
Оффлайн
Регистрация
1 Фев 2020
Сообщения
541
Реакции[?]
92
Поинты[?]
0
Пользователь
Статус
Оффлайн
Регистрация
4 Мар 2021
Сообщения
95
Реакции[?]
35
Поинты[?]
0
Одно другому не мешает)
ну нет. в большинстве случаев, оптимизация всегда выбор между чем то одним. или ты выкручиваешь в одну сторону или в другую или в третью. но никак не во все сразу.
мы говорим про стратегию . а не причесывание кода )
 
Всем Рептилойдам - Рен ТВ
Пользователь
Статус
Оффлайн
Регистрация
1 Фев 2020
Сообщения
541
Реакции[?]
92
Поинты[?]
0
ну нет. в большинстве случаев, оптимизация всегда выбор между чем то одним. или ты выкручиваешь в одну сторону или в другую или в третью. но никак не во все сразу.
мы говорим про стратегию . а не причесывание кода )
Ну в моём случае потеря нескольких десятков миллисекунд не проблема, программа то маленькая
 
Сверху Снизу