Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/32: Рейтинг темы: голосов - 32, средняя оценка - 4.66
 Аватар для davian
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122

Передача параметров в функцию asm вставкой в C++ Builder 2010

09.08.2010, 16:08. Показов 6302. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

Есть функция static void _stdcall. Вызов её происходит неявно, поскольку указатель на эту функцию передается в качестве параметра в другую функцию. Не буду вдаваться в подробности как и зачем это делается... Т.к. функция явно не вызывается, соответственно я не могу явно передать в неё параметры...

Однако,... насколько мне подсказывает мой ничтожный опыт и интуиция, это можно сделать с помощью asm вставки....

Итак вопрос как передать в функцию параметры с помощью ассемблера?..
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.08.2010, 16:08
Ответы с готовыми решениями:

Передача параметров из asm в VBA и обратно
Sorry коллеги, может пустяковая тема, но на форуме почему то не нашел (может плохо искал). очень удобная оболочка для разработки офисных...

Трабл со вставкой asm
Доброго времени суток форумчане) нуждаюсь в вашем совете... Есть код у меня: #include "stdafx.h" int _tmain(int...

Передача параметров в функцию
Добрый день. Вот есть вопросик. Допустим у меня есть 2 проекта. Первый проект создает объект в котором хранятся данные. Второй проект...

3
64 / 63 / 3
Регистрация: 16.11.2009
Сообщений: 156
09.08.2010, 16:28
stdcall функции получают параметры из стека, которые лежат перед адресом возвращения. А стэк каждая функция использует как ей вздумается. То-есть промежуточная функция (которая получает указатель) изменит стэк. Значит пердать параметры через него не получится. Можно попробовать положить параметры в стэк до вызова промежуточной функции. Но тогда надо высчитывать как далеко ушел ESP при вызове нужной функции, а из нее обращаться в параметрам (ESP-<сколько байтов заняла промежуточная функция>).

Самый простой вариант - глобальные переменные!
0
 Аватар для davian
4 / 4 / 2
Регистрация: 07.07.2009
Сообщений: 122
09.08.2010, 16:39  [ТС]
Цитата Сообщение от Orwomoi Посмотреть сообщение
stdcall функции получают параметры из стека, которые лежат перед адресом возвращения. А стэк каждая функция использует как ей вздумается. То-есть промежуточная функция (которая получает указатель) изменит стэк. Значит пердать параметры через него не получится. Можно попробовать положить параметры в стэк до вызова промежуточной функции. Но тогда надо высчитывать как далеко ушел ESP при вызове нужной функции, а из нее обращаться в параметрам (ESP-<сколько байтов заняла промежуточная функция>).

Самый простой вариант - глобальные переменные!
В ассемблере я абсолютный ноль, поэтому хотелось бы увидеть пример, с комментариями... А глобальные переменные не получится использовать, поскольку мне, в качестве параметра статической функции надо передать указатель на класс, из которого я вызываю эту функцию....

В конце концов можно изменить тип вызова функции, если не подходит stdcall, можно подставить подходящий... Ведь, насколько я понимаю, на результат это особо не повлияет. Повлияет только на способ размещения параметров в памяти...
0
64 / 63 / 3
Регистрация: 16.11.2009
Сообщений: 156
09.08.2010, 17:26
Помоему, для нормального решения нужен доступ к промежуточной функции. А если есть доступ, можно передать ей параметр, а она передаст главной.

Но если изменить промежуточную функцию невозможно. Можно просмотреть ее работу в дизассемблере, если есть неиспользуемые регистры, попробовать передать параметр через этот регистр. Если нужно передать несколько параметров, можно передать один указатель на массив параметров. Или передать параметры через FPU, XMM регистры. О_о

А если даже регистров нет, можно попробовать совсем плохой вариант. В главной функции, перед вызовом промежуточной, затолкать в стэк параметры. Скомпилированный вариант промежуточной функции открыть в дизассемблере. Посмотреть адрес ESP (1), прогнать до вызова главной функции, посмотреть новый адрес ESP (2). ESP1 минус ESP2 = колическтво байт, которые использует промежуточная функция (Result). Потом в главной функции можно обращаться к параметрам через

Assembler
1
2
3
4
5
6
push ebp
mov ebp,esp
param 1 = (ebp+4) + result
param 2 = (ebp+4) + (result+4)
param 3 = (ebp+4) + (result+8)
и тд...
P.S. Примеров нет, потому что я не знаю С++. И подводные камни связаные с ООП не учитываю.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.08.2010, 17:26
Помогаю со студенческими работами здесь

Передача параметров в функцию
Вызываю функцию: Main() { func(a,b); } func(int a1, int a2) { //внутри меняется значения a1 и a2 }

Передача параметров в функцию
Толи я чего-то туплю, толи всё же в мейн ошибка. Итак: есть функция, которая должна сообщать о результатах поиска изменением переменных...

Передача параметров в функцию
Помогите пожалуйста сделать лабораторную по ЯП. // Лабораторная работа 2 // тема &quot;Передача параметров в функцию&quot; // ...

Передача параметров в функцию
Возник вопрос по передачи параметров в функцию . Есть функции : static void F1(Pk pk, Pk1 pk1, Pk2 pk2, string n1, string n2) ...

Передача параметров в функцию
Пишу на VS C++ 2011 Windows form application не получается передать перменную класса в функцию тип Graphich ^gr. Делаю следующим образом...


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

Или воспользуйтесь поиском по форуму:
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, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru