|
3 / 3 / 1
Регистрация: 16.03.2012
Сообщений: 54
|
|||||||||||
MessageBox [asm & delphi]02.05.2017, 06:54. Показов 2555. Ответов 6
Метки нет (Все метки)
Добрый день.
У меня такая проблема. Пытаюсь сделать функцию на подобие MessageBoxW, по средствам ассемблера. Через IDA узнаю дизассемблированный код, получил: Кликните здесь для просмотра всего текста
Пытался сделать так: Кликните здесь для просмотра всего текста
Длл компилится успешно, но, при вызове функции, застревает на моменте "push [ebp+uType]". Пожалуйста, объясните, в чем моя ошибка или, что я делаю не так. Спасибо. P.S. Если создал тему не в подходящем разделе, прощу прощения.
0
|
|||||||||||
| 02.05.2017, 06:54 | |
|
Ответы с готовыми решениями:
6
Delphi & MSSQL2K & NText - глюк!!! Delphi и ASM Delphi -> asm |
|
Asm/C++/Delphi/Py/PHP/VBA
|
||||||
| 02.05.2017, 15:37 | ||||||
|
Потому что:
1. Не надо писать [ebp+wnd], пишите просто [wnd] или wnd и т.п. Компилятор сам добавит [ebp+...]. А так получается [ebp+ebp+wnd]. 2. push ebp + mov ebp,esp тоже делать не надо. 3. mov edi,edi и push 0 - это вообще зачем? 4. call [$...] - это вообще неверно, должно быть call MessageBox 5. retn добавляется автоматически. В общем, вот так:
1
|
||||||
|
3 / 3 / 1
Регистрация: 16.03.2012
Сообщений: 54
|
|||||||||||
| 03.05.2017, 00:49 [ТС] | |||||||||||
|
Спасибо большое, хотя бы теперь более понятна ситуация. На счет MessageBox, взял как пример, вообще, я хотел "вытащить" NtUserPostMessage из user32.dll, да и в целом, понять, как адаптировать ту или иную функцию, которая не экспортируется. По поводу второй функции, находил "переделанный" вид, выглядит он так:
Кликните здесь для просмотра всего текста
Однако, это не работает (возможно, различая в ОС, так как тема 2008 года, я же, использую 7 ос). Код на "семерке", IDA выдает такой: Кликните здесь для просмотра всего текста
И тут мне уже не ясно, имен параметров нет, но, функция имеет те же параметры, что и обычная PostMessageW. Предположу, что параметры = регистры. Пытался провести параллели с "переделанным" видом, но не осилил. Да и вообще, может есть более правильный вариант достичь моих целей, или все же "перевод" с ассемблера?
0
|
|||||||||||
|
Asm/C++/Delphi/Py/PHP/VBA
|
||
| 03.05.2017, 17:38 | ||
![]() Давайте по более простому пути, у меня есть подозрение, что этот путь есть. Потому как не зная броду не стоит лезть в воду, тем более в сегмент FS (если верить вот этому, fs:0C0h - это FastSysCall в Wow64, т.е. в 32-битной винде, боюсь, эффект будет не тот, какой ожидается). Для чего все эти телодвижения, что требуется сделать в итоге?
0
|
||
|
3 / 3 / 1
Регистрация: 16.03.2012
Сообщений: 54
|
|
| 03.05.2017, 18:48 [ТС] | |
|
Спасибо за ответ. По поводу целей и итогового результата.. Я хочу понять, как грамотно адаптировать ассемблерный код под Паскаль и С++. Литературы по этой теме не нашел, хотя и искал не столь углубленно. По результату, хотелось бы получить "законный" доступ к функциям ядра, PostMessage взял как пример. Следуя логике (возможно, ошибочной) и тому, что выдает IDA, функция PostMessageW это своего рода "маска", так как в ее теле, происходит вызов Nt функции с теми же параметрами. То есть, если не сработает по той или иной причине PostMessage, хук или подмена, или еще что то, то по сути, прямое обращение к функции ядра, должно решить вопрос.
По поводу NtUserPostMessage, разве ее нет в user32? ИДА ее находит, но, в экспортируемых ее нет. То есть, если функции нет в экспорте, до до стучаться до нее нельзя? В ntdll ее так же нет (вообще).
0
|
|
|
Asm/C++/Delphi/Py/PHP/VBA
|
||||
| 03.05.2017, 21:16 | ||||
|
В целом прологи/эпилоги/инструкции возврата генерируются автоматически. Доступ к параметрам можно осуществлять через имена переменных (тем более, что где-то используется соглашение fastcall (register), где-то доступ идёт через [esp], а где-то через [ebp] и пр. нюансы). Можно глянуть в исходники с ассемблерными вставками и поизучать (в Delphi этого добра навалом)... По поводу этой функции не подскажу ничего, не знаю о ней ничего ![]() Попробуйте копать в сторону win2k.sys. ![]() Половина WinAPI-функций исполняются в ядре. Или нужно выполнить свой код в ядре? Или ещё что-то? Если есть желание поковыряться во внутренностях Windows, можете полистать http://undocumented.ntinternals.net или книги типа "М.Руссинович, Д.Соломон. Внутреннее устройство Microsoft Windows". Добавлено через 2 минуты Кстати, у драйверов доступа к ядру гораздо больше, чем у пользовательских прог
1
|
||||
|
3 / 3 / 1
Регистрация: 16.03.2012
Сообщений: 54
|
|||
| 04.05.2017, 03:38 [ТС] | |||
|
Спасибо за ответ и прояснения.
![]()
0
|
|||
| 04.05.2017, 03:38 | |
|
Помогаю со студенческими работами здесь
7
Delphi + asm(Вставки), строки. Примеры работы IBX & InterBase & Delphi Delphi&Access&logs Delphi & Excel & Color MessageBox в DataModule - Delphi Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|