Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564

Динамический доступ к функции и его параметрам

18.01.2014, 04:51. Показов 1003. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Допустим: есть EditBox, в который я ввожу название интересующей меня функции.
Мне надо узнать:
1. Существует ли такое имя функции?(т.е. сама функция)
2. Какие аргументы у функции?
3. Тип возвращяемого значения функции?
*4. Можно ли использовать эту функцию?(т.е. исходя из кол-ва аргументов и их типов создать доп. edit boxi для ввода данных, после чего "Выполнить" и функция должна сработать, типа динамически)

Например введу Itoa, и мне должно показать:
Существует, int, char*.

Возможно ли вообще такое?... Т.е. конешно можно все предусмотренные для работы функции с их параметрами описать отдельным файлом, однако получится многовато. Если уж нельзя сделать то чего хочу, то буду делать громоздким способом.

Добавлено через 15 минут
Ой, забыл ещё один пункт:
*5. Если в функции использован перечисляемый тип какого либо аргумента(как например в CreateWindow в файле winuser.h перечисляются типы окон, ну OVERLAPPED и т.д.), то можно ли их выдрать из самого файла описывающего функцию?(опять же динамически, создастся например listbox и нужно выбрать возможные вариации)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.01.2014, 04:51
Ответы с готовыми решениями:

Доступ к параметрам функции, потоки WinAPI
Уважаемые программисты! Подскажите, пожалуйста, как получить доступ к элементам массива, если я передаю в качестве параметра стартовой...

Динамический запрос с выборкой по параметрам
Итак, снова я со своими проблемами, в очередной раз перелопатил по инета, но ничего не нашел! иссякло желание уже что-либо искать, а делать...

Создать и заполнить одномерный динамический масив в функции и вывести его
Нужно создать и заполнить одномерный динамический масив в функцыи и вывести его в проге #include <stdio.h> #include...

18
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
24.01.2014, 23:59
Izual, как ты себе это всё представляешь сделать динамически? Я завис уже на первом пункте: лопатить все dll's на поиск определенной ф-ции, или как? Не факт, что ее название нигде не пересечется, хоть и вероятность того мала, но всё же. Делай громоздким способом.
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
25.01.2014, 01:45  [ТС]
Цитата Сообщение от Digit@ll Посмотреть сообщение
Izual, как ты себе это всё представляешь сделать динамически? Я завис уже на первом пункте: лопатить все dll's на поиск определенной ф-ции, или как? Не факт, что ее название нигде не пересечется, хоть и вероятность того мала, но всё же. Делай громоздким способом.
Вообще не знаю как. Я даже не знаю как с dll работать... не приходилось как то, я понимаю что мне из файла winuser.h нужно эти параметры вытащить...
Ну в принципе я могу и "парсер" написать для сортировки данного файла, он мне выведет всё так как мне надо, для этого так сказать много ума не надо, просто логикой понять как составлен файл, какие последовательности и пусть потратить неделю и написать такую функцию.

И всё же я спрашиваю о самой возможности, т.к. ты сказал что можно лапатить dll, тогда возможность получается есть?... Тут уже нужно примерно представлять что будет если так сделать и если по другому, и сравнивать.
Громоздкий способ плох тем, что даже вытащив все функции файла winuser.h будут и другие, которые хранятся в другом файле... А тут уже универсальную функцию написать будет возможно тяжелее, или вообще не возможно, т.к. структуры файла, способ описания будут на столько сильно отличаться, что "чёрт голову сломает".
Да и мне в "громоздком способе" придётся лишнюю память выделять, кучу процедур ещё к ним, которые не факт что сработают всегда, а вот если где то не сработает, то возвращяемое например значение придётся всё равно руками писать... тут в файле winuser.h такого нет(только типы аргументов).
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
25.01.2014, 11:44
по первому пункту могу предложить вариант как это делают отладчики (например OllyDbg) - искать все вызовы (call) на подобии
Assembler
1
CALL DWORD PTR DS:[<&KERNEL32.GetCurrentProcess>]
и уже из этого списка искать ту, которую вам необходимо проверить на существование.
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
25.01.2014, 12:46
Izual... Не парься... Если ты так хочешь разобрать какую-либо ф-цию на запчасти и посмотреть как она отработает, например, с разными флагами, то указывай пока это всё явно в программе, а со временем приложишь необходимый функционал пусть и минимальный.
Пункты 2, 3: понятия не имею, возможно ли такое в принципе.

Не по теме:

А вообще у тебя планы я вижу Оочень большие. )

0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
26.01.2014, 04:55  [ТС]
Цитата Сообщение от Digit@ll Посмотреть сообщение
Izual... Не парься... Если ты так хочешь разобрать какую-либо ф-цию на запчасти и посмотреть как она отработает, например, с разными флагами, то указывай пока это всё явно в программе, а со временем приложишь необходимый функционал пусть и минимальный.
Пункты 2, 3: понятия не имею, возможно ли такое в принципе.

Не по теме:

А вообще у тебя планы я вижу Оочень большие. )

Да вот походу придётся сделать громоздко, т.к. что то инфы то нужно мне - не вижу. Хотя это громоздко было для меня не приемлимо только по одной причине - очень много функции нужно. Хотя я тут опять же подумал о том что я уже делал парсеры для сайтов и т.п.... Так в принципе я могу написать что то такое для каких то заглавных файлов, или даже для функции с сайта МСДН, и тупо от туда уже автоматом пусть дерёт всё что надо) Хотя хрен знает как это выйдет на самом деле =)

Планы - ну Наполеон рядом не стоял

Добавлено через 16 минут
Скажу так: Уже год делаю базу данных много составную, которая блин постоянно расширяется, уже замучался по 100 раз переделывать функции для рассчётов и т.п. В итоге навело на мысли, что нужно либо рекомпилятор "на месте", т.е. то что можно в Linux, т.к. там встроенный GCC с MinGW есть, либо.. а что либо, я на винде, тут его нет, поставлять компилятор с программой - это что то мне кажется слишком замудрённо для обычных юзеров... В итоге лучше я сам напишу собственный инетерпритатор через блочные схемы, но для этого нужно всё взвесить, чем сейчас и занимаюсь. Но что то функционал С++ или же знаний которые могу тут подчерпнуть - не достаточно для "правильной" реализации, вот и "кручу верчу" через левые варианты.
0
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
26.01.2014, 20:15
Izual похоже ты пытаешься изобрести велосипед с турбонадувом и вертикальным взлетом, может тебе проще скачать оффлайн версию MSDN и работать с ней, не придется гектары инфы перелопачивать, ну а для поиска опр. функ. не помешает просмотреть доки по PE формату , к примеру тут
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
26.01.2014, 22:57  [ТС]
Цитата Сообщение от ssXXss Посмотреть сообщение
Izual похоже ты пытаешься изобрести велосипед с турбонадувом и вертикальным взлетом, может тебе проще скачать оффлайн версию MSDN и работать с ней, не придется гектары инфы перелопачивать, ну а для поиска опр. функ. не помешает просмотреть доки по PE формату , к примеру тут
Да именно такие раритетные велосипеды очень интересуют.
Офф лайн версия - один фиг парсер к ней писать, но опять же придётся перелапачивать, т.к. там не везде всё одинаково написано(стиль).
По поводу ссылки - нифига не понял... Там что то так много всего что не понятно куда именно смотреть по интересующему меня вопросу) А оно вообще все мои пункты удовлетворит? (с 1 поста)
0
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
26.01.2014, 23:15
Цитата Сообщение от Izual Посмотреть сообщение
А оно вообще все мои пункты удовлетворит?
это на вряд ли, за то будешь хорошо разбираться в формате исполнимых файлов windows, поиске нужной функции в нужной длл или exe, возможно при использовании дизассемблера сможешь определять параметры функции.
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
26.01.2014, 23:37  [ТС]
Цитата Сообщение от ssXXss Посмотреть сообщение
это на вряд ли, за то будешь хорошо разбираться в формате исполнимых файлов windows, поиске нужной функции в нужной длл или exe, возможно при использовании дизассемблера сможешь определять параметры функции.
Очень много есть чего изучить можно, очень много форматов, очень много подходов, но стоит ли оно будет потраченного времени?...
На моём этапе(судя из того что я уже знаю) я наверно буду год изучать данную статью... Что то там намудрено ппц. Дизассембл это читерство имхо, "хакером" в понимании нынешнего времени становиться не хочется, лучше буду строить чем ломать =)
Походу придётся мне парсер писать под собственную базу данных с свойствами функций.
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
27.01.2014, 01:18
Цитата Сообщение от Izual Посмотреть сообщение
Например введу Itoa, и мне должно показать:
Существует, int, char*.
Ну хорошо, распарсил, выдал оригинал: "Существует, _In_ int _Val, _Pre_notnull_ _Post_z_ char * _DstBuf, _In_ int _Radix". А вызывать найденную ф-цию как будешь?
0
Заблокирован
27.01.2014, 10:43
ТС, узнать, если такая функция, можно если эти функции например в DLL все. При импорте функций из DLL, ты указываешь строкой её название, например:
C++
1
GetProcAddress(hMyDLL, "SuperFunc")
ну и если это барахло не FAILED, значит такая функция есть, а вот на счёт параметров - косяк, никак не узнаешь динамический наверное ...
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
27.01.2014, 15:55  [ТС]
Цитата Сообщение от ляга Посмотреть сообщение
ТС, узнать, если такая функция, можно если эти функции например в DLL все. При импорте функций из DLL, ты указываешь строкой её название, например:
C++
1
GetProcAddress(hMyDLL, "SuperFunc")
ну и если это барахло не FAILED, значит такая функция есть, а вот на счёт параметров - косяк, никак не узнаешь динамический наверное ...
Типы параметров можно дёргать с того же разсматриваемого winuser.h файла. База данных поддерживаемых функций обязательно будет в самой программе ну или отдельно, это не суть.
По поводу DLL ещё не знаю как с ней работать на Visual Studio 2005...

Digit@ll, вызов функции как любой функции, идущей чтением блок схемы выполнения... Это турбо наддув^ ^
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
27.01.2014, 22:08
Цитата Сообщение от ляга Посмотреть сообщение
узнать, если такая функция, можно если эти функции например в DLL все.
это хорошо, если либа собственноручная. А как вы собираетесь узнать имена функций сторонней библиотеки?
по 1 вопросу я уже дал ответ, и он судя по всему единственный - берите принцип дизассемблеров\отладчиков и ищите все call'ы.
2 вопрос практически не реализуем. В том же OllyDbg можно лишь увидеть имена аргументов функции но не тип, к примеру
Assembler
1
PUSH offset.device ; объявленная функция D3D11CreateDevice** device
по 3 вопросу думаю поколдовать что-нить да можно.
0
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
27.01.2014, 22:27
Цитата Сообщение от _lunar_ Посмотреть сообщение
А как вы собираетесь узнать имена функций сторонней библиотеки?
тут как раз нет ничего сложного ,при условии наличия у длл экспорта, достаточно пробежаться по заголовкам и найти экспортируемые функции, сложнее с теми которые не экспортируются.
0
27.01.2014, 22:44

Не по теме:

Цитата Сообщение от ssXXss Посмотреть сообщение
сложнее с теми которые не экспортируются.
вот в этом то и проблема. Какой же разработчик захочет сделать свою библиотеку читаемой :)

0
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
27.01.2014, 22:52
_lunar_ ... ну как я понял, Izual , хочет использовать MSDN и документированные функции WIN API , если же нет, ИМХО, его затея обречена на провал.
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
28.01.2014, 05:50
Цитата Сообщение от Digit@ll Посмотреть сообщение
А вызывать найденную ф-цию как будешь?
Цитата Сообщение от Izual Посмотреть сообщение
База данных поддерживаемых функций обязательно будет в самой программе ну или отдельно, это не суть.
Вот это я и хотел узнать, хотя бы относительной универсальности (а также динамичности) ноль. Вопросов больше не имею.
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
28.01.2014, 13:59  [ТС]
База данных поддерживаемых функций обязательно будет в самой программе ну или отдельно, это не суть.
Ну судя из услышанного, придётся так и сделать(хотя оно было запланированно на меньшее кол-во аргументов), ну и по сути ещё и придётся к каждой блоксхеме приписывать уже в программе вызов функции... Иначе кстати вопрос о "динамическом"(что у меня не будет по сути таким являться, потому как помимо БД отдельным файлом, создающимся частично парсером МСДН, будет ещё и код внутри программы, хотя я его наверно тоже парсером буду создавать, чтоб не мучаться, а там уж подключать всё новые и новые стандартные функции в обновлениях, что даст мне возможность следить за утечкой программы высоких запросов в фри юз, хотя базовые варианты фри будут, т.к. иначе фэйл 100%) вызове функции для меня остаётся полудинамическим, да я смотрю мне чистый Си, на который я операюсь не даст желаемого "идеального" результата, так же как произошло с динамическим кол-вом колонок в структурах.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.01.2014, 13:59
Помогаю со студенческими работами здесь

Построение динамического массива в функции и его перевод в глобальный динамический массив
Здравствуйте, моя проблема заключается в передаче построеного в функции динамического массива fdarray в глобальный динамический массив...

Функция: создать динамический массив, состоящий из n натуральных чисел и вернуть его из функции
Пришёл к вам за советом. Вот задание. Напишите функцию int* naturals(int n), которая создаст динамический массив, состящий из n натуральных...

Доступ к параметрам приложения
В басике это My.Settings, а в C#?

Доступ к параметрам кнопки
Всем привет! Как мне добраться до параметров кнопки через код? Конкретно мне нужно создать программку с двумя кнопками, при нажатии на...

Доступ к параметрам программы и окружению
int main(int argc, char *argv, char *env) { .......... return 0; } Как сделать доступными argc, argv и env в функциях и классах. ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru