|
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
|
|
Передача параметров в функцию asm вставкой в C++ Builder 201009.08.2010, 16:08. Показов 6302. Ответов 3
Метки нет (Все метки)
Всем привет!
Есть функция static void _stdcall. Вызов её происходит неявно, поскольку указатель на эту функцию передается в качестве параметра в другую функцию. Не буду вдаваться в подробности как и зачем это делается... Т.к. функция явно не вызывается, соответственно я не могу явно передать в неё параметры... Однако,... насколько мне подсказывает мой ничтожный опыт и интуиция, это можно сделать с помощью asm вставки.... Итак вопрос как передать в функцию параметры с помощью ассемблера?..
0
|
|
| 09.08.2010, 16:08 | |
|
Ответы с готовыми решениями:
3
Передача параметров из asm в VBA и обратно Трабл со вставкой asm
|
|
64 / 63 / 3
Регистрация: 16.11.2009
Сообщений: 156
|
|
| 09.08.2010, 16:28 | |
|
stdcall функции получают параметры из стека, которые лежат перед адресом возвращения. А стэк каждая функция использует как ей вздумается. То-есть промежуточная функция (которая получает указатель) изменит стэк. Значит пердать параметры через него не получится. Можно попробовать положить параметры в стэк до вызова промежуточной функции. Но тогда надо высчитывать как далеко ушел ESP при вызове нужной функции, а из нее обращаться в параметрам (ESP-<сколько байтов заняла промежуточная функция>).
Самый простой вариант - глобальные переменные!
0
|
|
|
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
|
||
| 09.08.2010, 16:39 [ТС] | ||
|
В конце концов можно изменить тип вызова функции, если не подходит stdcall, можно подставить подходящий... Ведь, насколько я понимаю, на результат это особо не повлияет. Повлияет только на способ размещения параметров в памяти...
0
|
||
|
64 / 63 / 3
Регистрация: 16.11.2009
Сообщений: 156
|
||||||
| 09.08.2010, 17:26 | ||||||
|
Помоему, для нормального решения нужен доступ к промежуточной функции. А если есть доступ, можно передать ей параметр, а она передаст главной.
Но если изменить промежуточную функцию невозможно. Можно просмотреть ее работу в дизассемблере, если есть неиспользуемые регистры, попробовать передать параметр через этот регистр. Если нужно передать несколько параметров, можно передать один указатель на массив параметров. Или передать параметры через FPU, XMM регистры. О_о А если даже регистров нет, можно попробовать совсем плохой вариант. В главной функции, перед вызовом промежуточной, затолкать в стэк параметры. Скомпилированный вариант промежуточной функции открыть в дизассемблере. Посмотреть адрес ESP (1), прогнать до вызова главной функции, посмотреть новый адрес ESP (2). ESP1 минус ESP2 = колическтво байт, которые использует промежуточная функция (Result). Потом в главной функции можно обращаться к параметрам через
1
|
||||||
| 09.08.2010, 17:26 | |
|
Помогаю со студенческими работами здесь
4
Передача параметров в функцию Передача параметров в функцию Передача параметров в функцию Передача параметров в функцию Передача параметров в функцию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|